vue3使用echarts实现地图撒点、飞线等功能

news2024/10/5 16:29:27

echarts地图配置参考链接
链接2

vue3使用echarts
在这里插入图片描述

map.vue

<template>
  <div class="echart-demo" id="demo"></div>
</template>

<script setup lang="ts">
//引入echart和json数据
import * as echarts from 'echarts'
import ShAhZj from './map.json'
import { onMounted } from 'vue'

//设置echart数据
let setOption = () => {
  //获取echart对象
  let dom = document.getElementById('demo')
  if (dom) {
    console.log(1111);
    let data = [
      {
        name: "上海市",
        value: Math.round(Math.random() * 100),
      },
      {
        name: "安徽省",
        value: Math.round(Math.random() * 100),
      },
      {
        name: "杭州市",
        value: Math.round(Math.random() * 100),
      },
      {
        name: "湖州市",
        value: Math.round(Math.random() * 100),
      },
      {
        name: "嘉兴市",
        value: Math.round(Math.random() * 100),
      }, {
        name: "舟山市",
        value: Math.round(Math.random() * 100),
      },
      {
        name: "绍兴市",
        value: Math.round(Math.random() * 100),
      },
      {
        name: "宁波市",
        value: Math.round(Math.random() * 100),
      },
      {
        name: "金华市",
        value: Math.round(Math.random() * 100),
        itemStyle: {
          areaColor: '#F50508',
          borderColor: '#1773c3', // 区域边框
          shadowColor: '#1773c3', // 阴影
        }
      }, {
        name: "台州市",
        value: Math.round(Math.random() * 100),
      },
      {
        name: "丽水市",
        value: Math.round(Math.random() * 100),
      },
      , {
        name: "温州市",
        value: Math.round(Math.random() * 100),
      },
      {
        name: "衢州市",
        value: Math.round(Math.random() * 100),
      },
    ]

    //初始化
    let myEchart = echarts.init(dom)
    //注册地图
    echarts.registerMap('上海安徽浙江', ShAhZj)
    let option = {
      backgroundColor: '#000f1e',
      geo: {
        map: '上海安徽浙江',
        aspectScale: 0.8,
        layoutCenter: ['50%', '50%'], //地图位置
        layoutSize: '75%',
        itemStyle: {
          normal: {
            shadowColor: '#276fce',
            shadowOffsetX: 0,
            shadowOffsetY: 0,
            opacity: 0.2
          },
          emphasis: {
            areaColor: '#276fce'
          }
        }
      },
      tooltip: {
        trigger: 'item',
        backgroundColor: 'rgba(166, 200, 76, 0.82)',
        borderColor: '#FFFFCC',
        showDelay: 0,
        hideDelay: 0,
        enterable: true,
        transitionDuration: 0,
        extraCssText: 'z-index:100',
        formatter: function (params, ticket, callback) {
          console.log('params', params.value);
          //根据业务自己拓展要显示的内容
          var res = ''
          var name = params.name
          var value = params.value[params.seriesIndex + 1] || params.value
          res = "<span style='color:#fff;'>" + name + '</span><br/>数据:' + value
          return res
        }
      },

      //是视觉映射组件,用于进行『视觉编码』,也就是将数据映射到视觉元素(视觉通道)。
      visualMap: {
        // 左下角定义 在选中范围中的视觉元素 渐变地区颜色
        type: "piecewise", // 类型为分段型
        top: "bottom",
        // calculable: true, //是否显示拖拽用的手柄(手柄能拖拽调整选中范围)。
        right: 10,
        splitNumber: 6,
        seriesIndex: [0],
        itemWidth: 20, // 每个图元的宽度
        itemGap: 2, // 每两个图元之间的间隔距离,单位为px
        pieces: [
          // 自定义每一段的范围,以及每一段的文字
          // { gte: 10000, label: "10000人以上", color: "#1890FF" }, // 不指定 max,表示 max 为无限大(Infinity)。
          {
            gte: 90,
            lte: 100,
            label: "90%-100%",
            color: "#007D7B",
          },
          {
            gte: 80,
            lte: 90,
            label: "80%-90%",
            color: "#0FA081",
          },
          {
            gte: 60,
            lte: 80,
            label: "60%-80%",
            color: "#F1C40E",
          },
          {
            gte: 0,
            lte: 60,
            label: "≤60%",
            color: "#2B80B9",
          },
          // { lte: 0, label: "无", color: "#FAFAFA" }, // 不指定 min,表示 min 为无限大(-Infinity)。
        ],
        textStyle: {
          color: "#737373",
        },
      },
      series: [
        {
          tooltip: {
            trigger: 'item',
          },

          name: '上海安徽浙江数据',
          type: 'map',
          map: '上海安徽浙江', // 自定义扩展图表类型
          showLegendSymbol: true, // 存在legend时显示
          label: { // 文字
            show: true,
            color: '#fff',
            fontSize: 10
          },
          itemStyle: { // 地图样式
            // areaColor: '#282C34',  //区域颜色
            // borderColor: '#ffffff',  //边框颜色
            // borderWidth: 1
            normal: {
              areaColor: '#0c274b',
              borderColor: '#1cccff',
              borderWidth: 1.5
            },
            emphasis: {
              areaColor: '#02102b',
              label: {
                color: '#fff'
              }
            }
          },
          emphasis: { // 鼠标移入时显示的默认样式
            itemStyle: {
              areaColor: '#4adcf0',
              borderColor: '#404a59',
              borderWidth: 1
            },
            label: { // 文字
              show: true,
              color: '#0D5EFF',
              fontSize: 12,
              fontWeight: 600
            },
          },
          data: data
          // [
          //   //自定义区域的颜色
          //   {
          //     name: '金华市',

          //   }
          // ],
        },
        // 区域散点图
        {
          type: 'effectScatter',
          coordinateSystem: 'geo',
          zlevel: 2,
          symbolSize: 10,
          rippleEffect: {
            //坐标点动画
            period: 3,
            scale: 5,
            brushType: 'fill'
          },
          label: {
            normal: {
              show: true,
              position: 'right',
              formatter: '{b}',
              color: '#b3e2f2',
              fontWeight: 'bold',
              fontSize: 18
            }
          },

          data: [{ name: '上海', value: [121.472644, 31.231706] }],
          itemStyle: {
            //坐标点颜色
            normal: {
              show: true,
              color: 'green',
              shadowBlur: 20,
              shadowColor: '#fff'
            },
            emphasis: {
              areaColor: '#f00'
            }
          }
        },

        // 飞线
        {
          type: 'lines',
          zlevel: 1,
          effect: {
            show: true,
            period: 4, // 箭头指向速度,值越小速度越快
            trailLength: 0.1, // 特效尾迹长度[0,1]值越大,尾迹越长重
            symbol: 'arrow', // 箭头图标
            symbolSize: 10 // 图标大小
          },
          lineStyle: {
            normal: {
              width: 1, // 尾迹线条宽度
              opacity: 1, // 尾迹线条透明度
              curveness: 0.3 // 尾迹线条曲直度
            }
          },
          data: [
            {
              fromName: '台州',
              toName: '嘉兴',
              coords: [
                [121.428599, 28.661378], // 起始
                [120.750865, 30.762653] // 结束
              ]
            }
          ]
        },

        // 气泡,用于突出目的地
        {
          type: 'effectScatter',
          coordinateSystem: 'geo', // 使用地理坐标系
          // 要有对应的经纬度才显示,先经度再维度
          data: [
            { name: '台州', value: [121.428599, 28.661378] }
          ],
          showEffectOn: 'render', // 绘制完成后显示特效
          rippleEffect: {
            scale: 4, // 波纹的最大缩放比例
            brushType: 'stroke'
          },
          hoverAnimation: true,
          label: { // 图形上的文本标签
            show: true,
            formatter: '{b}',
            position: 'right',
            fontWeight: 500,
            fontSize: 10
          },
          // 默认样式
          itemStyle: {
            color: '#32cd32',
            shadowBlur: 10,
            shadowColor: '#333'
          },
          // 鼠标移入时样式
          emphasis: {
            itemStyle: {
              color: '#f4e925' // 高亮颜色
            }
          },
          zlevel: 1
        },
        // 坐标用于突出起点
        {
          type: 'scatter',
          coordinateSystem: 'geo',
          zlevel: 2,
          rippleEffect: {
            period: 3,
            brushType: 'stroke',
            scale: 3
          },
          symbol: 'pin',
          symbolSize: 50,
          data: [
            {
              name: '嘉兴',
              value: [120.750865, 30.762653]
            }
          ]
        }
      ],
    }
    myEchart.setOption(option);
    window.addEventListener('resize', function () {
      myEchart.resize();
    });
  }

}

onMounted(() => {
  setOption()
})

</script>

<style scoped lang="scss">
.echart-demo {
  width: 800px;
  height: 600px;
}
</style>

地图的map.json数据自己获取

我是获取可上海、安徽、以及浙江省的市级子区域坐标

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1069553.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ffmpeg ts 关于av_seek_frame

1 ffmpeg命令行 一般对视频文件的裁剪 我们通过一行 ffmpeg命令行即可实现&#xff0c;比如 ffmpeg -ss 0.5 - t 3 - i a.mp4 vcodec copy b.mp4 其中 -ss 放置较前 开启精准seek定位 对于mp4而言 seek将从moov中相关索引表查找 0.5s时刻附近最近的关键帧 &#xff08;此描述…

systemd服务日志重定向到文件

方式一&#xff08;centos7&#xff09; [Service] ExecStart"/usr/bin/sh test.sh >> info.log 2>&1"方式二&#xff08;centos8&#xff09; StandardOutput 和 StandardError&#xff0c;用于重定向标准输出和标准错误输出 [Service] StandardOut…

k8s containerd查看镜像

直接查看crictl image会报错&#xff1a; 1) crictl config runtime-endpoint unix:///run/containerd/containerd.sock 2) vi /etc/crictl.yaml 3) systemctl daemon-reload 此时&#xff0c;再查看image:

Kettle连接数据库[MySQL]报错

在连接数据库页面填写完成后点击“测试” 报错信息&#xff1a; 错误连接数据库 [ETLqiangzi] : org.pentaho.di.core.exception.KettleDatabaseException: Error occurred while trying to connect to the databaseDriver class org.gjt.mm.mysql.Driver could not be found…

nssm nginx window 部署和开机启动服务

部署 去到Nginx官网&#xff1a;nginx news &#xff0c;然后点击“download” 在nginx的配置文件是conf目录下的nginx.conf nginx.exe http://localhost 在cmd命令窗口里面输入nginx命令(快速停止nginx) &#xff1a; nginx -s stop 或者使用(完整有序的停止nginx)命…

elasticsearch深度分页问题

一、深度分页方式from size es 默认采用的分页方式是 from size 的形式&#xff0c;在深度分页的情况下&#xff0c;这种使用方式效率是非常低的&#xff0c;比如我们执行如下查询 1 GET /student/student/_search 2 { 3 "query":{ 4 "match_all":…

航拍飞行器经营商城小程序的作用是什么

航拍人群越来越越多&#xff0c;一款靠谱的装备往往能达到预期效果&#xff0c;随着互联网信息传播度加深&#xff0c;也吸引了大批同样的爱好者加入航拍序列。 对航拍飞行器企业/经营商来说&#xff0c;市场增幅下也带来了不少商机&#xff0c;然在实际销售及客户赋能方面还是…

必备的常见芯片封装

-网友&#xff1a;这什么破封装&#xff0c;这么难焊&#xff01; -工程师&#xff1a;你才焊过几种芯片封装呀&#xff0c;SOT封装都觉得难&#xff1f; 我们常见的芯片封装&#xff1a; 第一种&#xff0c;DIP封装&#xff0c;DIP即双列直插式封装&#xff0c;引脚从芯片两…

vue-2

一、文章内容概括 1.指令补充 指令修饰符v-bind对样式增强的操作v-model应用于其他表单元素 2.computed计算属性 基础语法计算属性vs方法计算属性的完整写法成绩案例 3.watch侦听器 基础写法完整写法 4.综合案例 &#xff08;演示&#xff09; 渲染 / 删除 / 修改数量 …

tomcat安装,创建web后端项目,部署项目过程

1&#xff0c;安装服务器&#xff0c;使用 Apache免费提供的服务器TomCat&#xff0c;注意JDK版本。 TomCat官方站点 文件解压目录。 启动服务器&#xff1a;bin目录下点击startup.bat&#xff0c;出现小黑框&#xff0c;浏览器默认访问http://127.0.0.1:8080/ 关闭服务器&…

C# 通过winmm枚举音频设备

文章目录 前言一、如何实现&#xff1f;1、DllImport接口&#xff08;1&#xff09;、方法&#xff08;2&#xff09;、结构体2、定义实体3、实现枚举 二、完整代码三、使用示例总结 前言 使用C#做音频录制时需要获取音频设备信息&#xff0c;比如使用ffmpeg进行录制需要先获取…

PMP该如何备考?

我觉得最主要的就是需要打造属于自己的学习计划&#xff0c;因为每个人的学习能力是不一样的&#xff0c;没有好的学习方法&#xff0c;就会导致学习不好&#xff0c;最终获不得成绩&#xff0c;拿不下证书。 所以接下来就说一下我自己的一些学习方法&#xff0c;如对你有用的…

家政小程序开发|家政预约维修保洁系统搭建

家政预约小程序开发&#xff0c;简单易用家政服务公司小程序&#xff0c;客户&#xff0b;员工&#xff0b;派单&#xff0b;合同&#xff0b;财务&#xff0b;营销获客一键搞定&#xff01; 那么家政小程序都有什么功能&#xff0c;今天我就给大家介绍下&#xff1b; 1、地理…

自学(黑客)技术方法 必看 ——网络安全

如果你想自学网络安全&#xff0c;首先你必须了解什么是网络安全&#xff01;&#xff0c;什么是黑客&#xff01;&#xff01; 1.无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面性&#xff0c;例如 Web 安全技术&#xff0c;既有 Web 渗透2.也有 Web 防…

智能视频监控,究竟“智”在哪里?

当人们一提到智能视频监控时&#xff0c;就会想起高清摄像头、人脸识别等技术。其实不然&#xff0c;真正智能视频监控不仅仅是这些技术算法&#xff0c;更重要的是如何将这些算法融入到应用场景中&#xff0c;更好地去服务大众、起到降本增效的作用。 首先&#xff0c;智能视…

Nginx支持SNI证书,已经ssl_server_name的使用

整理了一些网上的资料&#xff0c;这里记录一下&#xff0c;供大家参考 什么是SNI&#xff1f; 传统的应用场景中&#xff0c;一台服务器对应一个IP地址&#xff0c;一个域名&#xff0c;使用一张包含了域名信息的证书。随着云计算技术的普及&#xff0c;在云中的虚拟机有了一…

自定义无边框窗口

效果&#xff1a; 可拖动拉伸 ui&#xff1a;设计如下 样式表&#xff1a;在ui CustomDialog 里设置的 #widget_title{background: #E6F1EB;border-top-left-radius: 20px;border-top-right-radius: 20px;}#widget_client{background-color: rgb(255, 255, 255);border-bottom…

游乐园票务小程序商城的作用是什么

游乐园是众多儿童喜欢的场所&#xff0c;尤其大城市&#xff0c;场所多且规模大&#xff0c;成年人也会前往&#xff0c;对园方来说自然是好的&#xff0c;然而在实际经营中&#xff0c;也会面临一些痛点。 通过【雨科】平台制作游乐园商城&#xff0c;电脑手机端小程序端打造品…

小说推文和短剧推广的收益模式

先说授权方式&#xff0c;可以使用”巨量推文“进行授权 申请授权后怎么获取收益呢 小说推文分为cpa拉新和cps推广的形式 cpa拉新的价格大概未4-10多块钱一个固定价格&#xff0c;cps则按充值比例进行分成&#xff0c;cps的充值分成比例大概60%-90%左右 短剧推广也是一样分…

低功耗对于IOT来说是必备技术吗?

万物互联的时代&#xff0c;现代人已普遍接受电视、音箱等电器设备具备智能化能力&#xff0c;也是在这个趋势下&#xff0c;我们身边越来越多的 iot 设备联网和交互成为刚需。 但 iot 设备也面临到一些非常显著的痛点&#xff0c;例如iot设备的内存、处理器等核心元件无法与手…