首页 > 其他分享 >【Echarts地图开发全流程加全套代码】

【Echarts地图开发全流程加全套代码】

时间:2024-09-30 14:23:40浏览次数:13  
标签:repeat false name itemStyle 流程 地图 全套 type Echarts

前言

本篇分享近期做的项目echarts相关地图开发的相关细节和避坑细节!!

一、地图Json文件

echarts地图采用官网的type类型map进行配置开发

Apache EChartsApache ECharts,一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。icon-default.png?t=O83Ahttps://echarts.apache.org/zh/index.html

渲染地图需要通过Json文件来渲染,那么JSON文件可以参考我的上一篇文章内容

二、地图开发过程

初始化

通过echarts配置项开发,首先我们需要一个容器来接收

    <div ref="mapRef" class="map"></div>

class类名可以设置这个容器的宽高比例等等

ref属性值用于我们初始化函数init地图,具体如下:

this.$nextTick(() => {
 this.chartRef = this.$echarts.init(this.$refs.mapRef)
        this.chartRef.setOption(option)
        window.addEventListener('resize', () => {
          this.chartRef.resize()
        })
}

在组件挂载时进行上面的操作,同时在组件销毁前进行相同的注销操作,特别是addEventListener

  beforeDestroy() {
    this.chartRef = this.$echarts.init(this.$refs.mapRef)
    window.removeEventListener('resize', () => {
      this.chartRef.resize()
    })
    this.chartRef.dispose()
    this.chartRef = null
  },

基础配置Options

在不同的业务场景会有不同的业务需求,基本的地图配置即可渲染出一个地图。相关渲染字段不明白的可以去官网配置项文档查看详细内容

const options = {
backgroundColor: 'transparent', // 背景色
        // 提示浮窗配置
        tooltip: {
          //提示框组件
          show: true,
          trigger: 'item',
          triggerOn: 'mousemove', // 触发条件
          appendToBody: true,
          position: function (pos, params, dom, rect, size) {
            // 固定在鼠标位置
            return [pos[0], pos[1]]
          },
          backgroundColor: 'transparent', // 提示框浮层背景颜色
          borderWidth: 0,
          padding: [0], // 提示框浮层内边距
          // 提示框浮层的文本样式
          textStyle: {
            color: '#fff'
          }
        },
geo:[
          {
            type: 'map',
            map: 'china',
            zlevel: 4,
            aspectScale: 0.9,
            zoom: 1.45,
            layoutCenter: ['47%', '50%'],
            layoutSize: '100%',
            roam: false,
            silent: true,
            regions: [
              {
                name: '南海诸岛',
                value: 0,
                itemStyle: {
                  opacity: 0
                },
                label: {
                  show: false
                }
              }
            ],
            label: {
              show: true,
              formatter: (params) => {
                if (this.areaCode == 100000) {
                  const LevelOne = this.mapIconData?.find((item) => item.name === params.name)
                  if (LevelOne) {
                    return `{area_name|${LevelOne?.name}}\n {area_bg|${LevelOne?.showValue} 亿}`
                  } else {
                    return ''
                  }
                } else {
                  return `{area_name|${params?.name}}`
                }
              },
              rich: {
                area_name: {
                  color: '#FFF',
                  fontSize: '9px',
                  fontWeight: 'bold',
                  fontStyle: 'italic',
                  align: 'center',
                  textBorderWidth: 3,
                  textBorderColor: '#110070',
                  lineHeight: 10
                },
                area_bg: {
                  color: '#FFF',
                  fontWeight: 'bold',
                  fontStyle: 'italic',
                  fontSize: '11px',
                  align: 'center',
                  width: 47,
                  height: 20,
                  lineHeight: 20,
                  backgroundColor: {
                    image: indexImg
                  }
                },
                area_gif: {
                  width: 50,
                  height: 50,
                  lineHeight: 30,
                  align: 'center',
                  backgroundColor: {
                    image: arrowImg
                  }
                }
              }
            },
            itemStyle: {
              normal: {
                // 地图样式
                areaColor: 'transparent', // 区域颜色
                borderColor: 'transparent', // 边框颜色
                borderWidth: 0
              }
            }
          },
    ],
series:[
{
          type: 'map',
          map: 'china',
          roam: false,
          zlevel: 2,
          layoutSize: '100%',
          layoutCenter: ['47%', '50%'],
          animation: false,
          zoom: 1.45, // 缩放比
          aspectScale: 0.9, //长宽比
          showLegendSymbol: false, // 存在legend时显示
          itemStyle: {
            normal: {
              // 地图样式
              areaColor: {
                type: 'pattern',
                image: firstImg, //配置图片
                repeat: 'repeat' //可选值repeat、no-repeat、repeat-x、repeat-y
              },
              borderColor: '#0bc6f2',
              borderWidth: 1
            }
          },
          emphasis: {
            itemStyle: {
              areaColor: {
                type: 'pattern',
                image: activeImg,
                repeat: 'repeat'
              },
              borderColor: '#fff',
              borderWidth: 2
            },
            label: {
              show: false
            }
          },
          select: {
            label: {
              show: false
            },
            itemStyle: {
              areaColor: {
                type: 'pattern',
                image: activeImg,
                repeat: 'repeat'
              },
              borderColor: '#fff',
              borderWidth: 2
            }
          },
          data: this.mapGeoData
        },
    ]
 }

个性化地图配置—多图层

根据我目前所需的业务需求提供相关个性化配置以供参考~

首先就是地图的多图层问题

多图层问题为了样式美观,需要在geo数组下建造多个对象,通过zlevel属性去控制层级,并且只有第一层地图有相关业务功能所以其他图层地图设置silent属性沉默属性,不响应操作

        geo: [
          {
            type: 'map',
            map: 'china',
            zlevel: 4,
            aspectScale: 0.9,
            zoom: 1.45,
            layoutCenter: ['47%', '50%'],
            layoutSize: '100%',
            roam: false,
            silent: true,
            regions: [
              {
                name: '南海诸岛',
                value: 0,
                itemStyle: {
                  opacity: 0
                },
                label: {
                  show: false
                }
              }
            ],
            label: {
              show: true,
              formatter: (params) => {
                if (this.areaCode == 100000) {
                  const LevelOne = this.mapIconData?.find((item) => item.name === params.name)
                  if (LevelOne) {
                    return `{area_name|${LevelOne?.name}}\n {area_bg|${LevelOne?.showValue} 亿}`
                  } else {
                    return ''
                  }
                } else {
                  return `{area_name|${params?.name}}`
                }
              },
              rich: {
                area_name: {
                  color: '#FFF',
                  fontSize: '9px',
                  fontWeight: 'bold',
                  fontStyle: 'italic',
                  align: 'center',
                  textBorderWidth: 3,
                  textBorderColor: '#110070',
                  lineHeight: 10
                },
                area_bg: {
                  color: '#FFF',
                  fontWeight: 'bold',
                  fontStyle: 'italic',
                  fontSize: '11px',
                  align: 'center',
                  width: 47,
                  height: 20,
                  lineHeight: 20,
                  backgroundColor: {
                    image: indexImg
                  }
                },
                area_gif: {
                  width: 50,
                  height: 50,
                  lineHeight: 30,
                  align: 'center',
                  backgroundColor: {
                    image: arrowImg
                  }
                }
              }
            },
            itemStyle: {
              normal: {
                // 地图样式
                areaColor: 'transparent', // 区域颜色
                borderColor: 'transparent', // 边框颜色
                borderWidth: 0
              }
            }
          },
          {
            type: 'map',
            map: 'china',
            roam: false,
            zlevel: 2,
            layoutSize: '100%' /* 地图的大小 */,
            layoutCenter: ['47%', '50%'] /* 把地图放到盒子的正中间 */,
            zoom: 1.45,
            aspectScale: 0.9,
            regions: [
              {
                name: '南海诸岛',
                value: 0,
                itemStyle: {
                  opacity: 0
                },
                label: {
                  show: false
                }
              }
            ],
            label: {
              show: false
            },
            // 当前第一层地图的初始样式
            itemStyle: {
              normal: {
                // 地图样式
                areaColor: {
                  type: 'pattern',
                  image: firstImg, //配置图片
                  repeat: 'repeat' //可选值repeat、no-repeat、repeat-x、repeat-y
                },
                borderColor: '#0bc6f2',
                borderWidth: 1
              }
            },
            emphasis: {
              itemStyle: {
                areaColor: {
                  type: 'pattern',
                  image: activeImg,
                  repeat: 'repeat'
                },
                borderColor: '#fff',
                borderWidth: 2
              },
              label: {
                show: false
              }
            },
            select: {
              label: {
                show: false
              },
              itemStyle: {
                areaColor: {
                  type: 'pattern',
                  image: activeImg,
                  repeat: 'repeat'
                },
                borderColor: '#fff',
                borderWidth: 2
              }
            }
          },
          // 不包含子区域的地图
          {
            type: 'map',
            map: 'china_nochild',
            zlevel: 3,
            aspectScale: 0.9,
            zoom: 1.45,
            layoutCenter: ['47%', '50%'],
            layoutSize: '100%',
            roam: false,
            silent: true,
            regions: [
              {
                name: '南海诸岛',
                value: 0,
                itemStyle: {
                  opacity: 0
                },
                label: {
                  show: false
                }
              }
            ],
            itemStyle: {
              normal: {
                // 地图样式
                areaColor: 'transparent', // 区域颜色
                borderColor: '#c5eaff', // 边框颜色
                opacity: 1,
                shadowColor: '#fff',
                shadowBlur: 20,
                // shadowOffsetX: 0,
                shadowOffsetY: 3,
                borderWidth: 3
              }
            }
          },
          {
            type: 'map',
            map: 'china_nochild',
            zlevel: -1,
            aspectScale: 0.9,
            zoom: 1.45,
            layoutCenter: ['47%', '52%'],
            layoutSize: '100%',
            roam: false,
            silent: true,
            regions: [
              {
                name: '南海诸岛',
                value: 0,
                itemStyle: {
                  opacity: 0
                },
                label: {
                  show: false
                }
              }
            ],
            itemStyle: {
              normal: {
                // 地图样式
                areaColor: {
                  type: 'pattern',
                  image: secondImg, //配置图片
                  repeat: 'repeat' //可选值repeat、no-repeat、repeat-x、repeat-y
                },
                borderColor: '#35b5ff', // 边框颜色
                borderWidth: 1
              }
            }
          },
          {
            type: 'map',
            map: 'china_nochild',
            zlevel: -2,
            aspectScale: 0.9,
            zoom: 1.45,
            layoutCenter: ['47%', '54%'],
            layoutSize: '100%',
            roam: false,
            silent: true,
            regions: [
              {
                name: '南海诸岛',
                value: 0,
                itemStyle: {
                  opacity: 0
                },
                label: {
                  show: false
                }
              }
            ],
            itemStyle: {
              normal: {
                // 地图样式
                areaColor: '#2770ca', // 区域颜色
                borderColor: '#35b5ff', // 边框颜色
                shadowColor: '#00d2ff',
                shadowBlur: 18,
                shadowOffsetY: -10,
                borderWidth: 1,
                opacity: 1
              }
            }
          }
        ],

其中地图为了实现中国地图边缘线高亮并且和地图内省界线样式冲突,添加了不包含子区域的地图对象,这个需要和后端接口提供的json对象渲染或者去Datav官网下载不包含地图子区域的json文件

个性化地图配置—迁徙线

地图上添加迁徙线的相关配置在series数组中添加

        {
          type: 'lines',
          zlevel: 2,
          silent: true,
          effect: {
            show: true,
            period: 2.6, // 箭头指向速度,值越小速度越快
            trailLength: 0.8, // 特效尾迹长度[0,1]值越大,尾迹越长重
            symbol: 'pin', // 箭头图标
            color: '#4ee0ff',
            loop: true,
            symbolSize: 8 // 图标大小
          },
          lineStyle: {
            width: 1, // 尾迹线条宽度
            // opacity: 0, // 尾迹线条透明度
            curveness: 0.4, // 尾迹线条曲直度
            color: 'transparent'
          },
          data: this.mapMigrationData
        },

其中data为迁徙线的渲染数据,其他配置或者更多请去文章开头官网寻找~

个性化地图配置—涟漪图

地图上添加涟漪图的相关配置在series数组中添加

 {
          type: 'effectScatter',
          coordinateSystem: 'geo',
          geoIndex: 0,
          zlevel: 2,
          silent: true,
          showEffectOn: 'render', // 绘制完成后显示特效
          hoverAnimation: true,
          large: true, // 是否开启大数据量优化
          rippleEffect: {
            // 涟漪特效
            period: 3, // 动画时间-秒数
            brushType: 'stroke', // 波纹绘制方式 stroke, fill
            scale: 2 // 波纹圆环最大限制,值越大波纹越大
          },
          symbol: 'circle',
          symbolSize: function (value, params) {
            if (params?.name === '北京市') {
              return 9
            } else {
              return 5
            }
          },
          label: {
            show: false
          },
          itemStyle: {
            normal: {
              show: false,
              color: '#4DFEEC'
            }
          },
          data: this.mapRipplesData
        }

个性化地图配置—自定义图标

地图上添加图标的相关配置在series数组中添加

        {
          type: 'scatter',
          coordinateSystem: 'geo', // 使用地理坐标系
          geoIndex: 0,
          zlevel: 2,
          data: [],
          // data: this.mapIconData, // 要有对应的经纬度才显示,先经度再维度
          showEffectOn: 'render', // 绘制完成后显示特效
          hoverAnimation: false,
          emphasis: {
            scale: false
          },
          silent: true,
          large: true, // 是否开启大数据量优化,在数据图形特别多而出现卡顿时候可以开启。
          symbol: 'image://' + require('@/assets/icons/arrow.png'),
          symbolSize: 50
        }

注意:

  • 以上配置如果是单图层会比较简单,多图层情况需要注意层级zlevel的展现
  • geo数组和series数组,在需要进行业务操作交互的第一层图层,需要注意其层级level、roam、zoom、aspectScale均需要设置为一致

以上就是一些配置相关问题,有关于地图的其他配置问题和疑难问题都可以留言或私信我,我会第一时间关注并回复的~

今天的知识分享就到这里啦~希望大家在这能学到知识一起分享一起进步,成为更好的自己!

标签:repeat,false,name,itemStyle,流程,地图,全套,type,Echarts
From: https://blog.csdn.net/m0_60623820/article/details/142653174

相关文章

  • django基于ECharts的毕业生招聘信息可视化分析系统(源码+vue+可视化大屏展示+爬虫分析
    收藏关注不迷路!!......
  • 微服务JMeter解析部署使用全流程
    目录1、介绍2、下载3、运行4、设置简体中文版5、开始测试1、添加线程组2、添加监听器3、添加请求先.测试userController里的查询方法6、查看结果1、查看结果树2、汇总报告3、聚合报告7、JMeter报错1、介绍ApacheJMeter是Apache组织基于Java开发的压力......
  • <免费开题>python英汉电子词典论文|全套源码+文章lw+毕业设计+课程设计+数据库+ppt
    <免费开题>python英汉电子词典论文|全套源码+文章lw+毕业设计+课程设计+数据库+ppt摘要字典的运用已经非常的普遍了,从每一个人从入学开始,通过字典能够更好的进行生僻字的查找,而在学习英语的过程中,现在英语的教育越来越普遍,人们应用英语的场景也越来越多,而使用字典来对不懂的......
  • 抖音如何实现快速涨粉 巨量千川投流的操作流程是什么 新手小白怎样才能快速涨粉1000涨
    在抖音这个充满机遇与挑战的平台上,快速涨粉是众多创作者和商家的共同目标。而巨量千川投流则为实现这一目标提供了强大的助力。首先,了解巨量千川投流的优势是关键。巨量千川投流作为抖音的官方投流渠道,有着广泛的受众覆盖面。它不仅能将作品推送给抖音用户,还能触及今日头条、西......
  • 【泛微E9】流程打分表实现
    需求描述:流程表单固定带出129行明细,前6项只要有两项打分为-10(-10为固定分值),总分即为0。实现方法:给明细表字段【自定义序号】赋值,通过字段联动带出129行明细。//遍历明细行的写法varrowArr=WfForm.getDetailAllRowIndexStr("detail_1").split(",");vararrScore=[];cons......
  • 基于Python+flask+MySQL+HTML的全国范围水质分析预测系统,可视化用echarts,预测算法随机
    1绪论近年来,水质监测系统的进步显著,这在全球环保意识不断提升的背景下尤为明显。大量资源被投入到水质监测技术的研发和应用中,以不断优化监测效能。水资源的保护及健康环境的维护,这种趋势旨在提升人们生活质量,确保优质的生活条件。通过持续不懈的努力,我们得以实现对水质的及......
  • 开源b2b2c商城系统流程 多用户商城系统流程图
    在选择多用户商城系统时,服务质量至关重要。商淘云多用户商城系统凭借其卓越的功能和强大的客户支持,成为了许多企业的首选。下面我们一起分析多用户商城的特性及b2b2c商城系统思维导图,文中的图大家需要的可评论“666”领取。首先,商淘云提供了全面的电商解决方案,通过配置可以满......
  • 16.微服务hystrix解析部署使用全流程
    目录1、什么是hystrix?2、Hystrix作用3、Hystrix使用场景4、准备工作5、应用1、引入依赖2、开启Hystrix3、添加熔断6、添加仪表盘【了解,功能单一使用少】添加依赖添加配置类HystrixConfig启动项目,访问如下地址​编辑注意:1、什么是hystrix?是一个做熔断的框架......
  • Unity导入xLua流程
    xLua文档xLua下载Releases中带版本号的zip压缩包,解压到Assets,形成目录:Plugins/XLua/XLuaSample1.csusingUnityEngine;usingXLua;publicclassXLuaSample1:MonoBehaviour{voidStart(){LuaEnvenv=new();env.DoString("print('hello......
  • PHP支付,TP5.0接入支付宝支付流程
    一、支付宝沙箱1.登录支付宝开放平台https://open.alipay.com/;点击右上角的“控制台”菜单 2.下拉到页末找到“沙盒”  配置一下基础信息:配置一下信息,特别注意,网关地址:沙箱环境是有dev的,正式上要去掉dev;二、DEMO1.下载电脑网站支付Demophp版本 2.下载后把整个文......