Echarts—根据地理坐标被标注的中国地图(标记可以自定义为图片)

news2024/11/24 12:56:56

中国地图

  • 实现效果图
  • 创建echartChina.vue组件
  • 使用echartChina.vue组件
  • 修改标记图标为图片

实现效果图

在这里插入图片描述

这是一个有阴影的,并且根据坐标点被标记的地图展示,下面我们就把实现的代码贴出来,老样子,还是开袋即食!

创建echartChina.vue组件

1.点击下载中国地图json文件

把中国地图的json数据下载下来,放到项目本地中的utils文件夹下;位置随意,想放哪里都可以,能找到就行!

2.先写一个echartChina.vue组件
为了方便复用,我们可以先写一个地图组件,因为要实现地图阴影的效果,所以组件中对地图渲染了两次进行重叠,第一次是初始化地图阴影,第二次初始化就是实现地图功能效果的;

组件全部代码如下,直接粘贴即可;

<template>
   <div id="china_map"></div>
</template>

<script>
import * as echarts from 'echarts';
import china from '@/utils/china.json'
echarts.registerMap('china', china)

export default {
  data() {
    return {
    };
  },
  
  methods: {
    //初始化中国地图
    initEchartMap() {
      let mapDiv = document.getElementById('china_map');
      let myChart = echarts.init(mapDiv);
      var options
      options =  {
        tooltip: {
          show:false,
          triggerOn: "mousemove",   //mousemove、click
          padding:8,
          backgroundColor:'rgba(0,0,0,0.6)',
          borderWidth:0,
          textStyle:{
            color:'#fff',
            fontSize:12
          },
        },
        geo: {
          map: "china",
          roam: false,// 一定要关闭拖拽
          zoom: 1.6,
          center: [102, 36], // 调整地图位置
          aspectScale: 0.80, //长宽比
          label: {
            normal: {
              show: false, //关闭省份名展示
              fontSize: "10",
              color: "rgba(0,0,0,0.7)"
            },
            emphasis: {
              show: false
            }
          },
          itemStyle: {
            normal: {
              areaColor: "#0d0059",
              borderColor: "#389dff",
              borderWidth: 1, //设置外层边框
              shadowBlur: 6,
              shadowOffsetY: 12,
              shadowOffsetX: -5,
              shadowColor: "#01012a"
            },
            emphasis: {
              areaColor: "#184cff",
              shadowOffsetX: 0,
              shadowOffsetY: 0,
              shadowBlur: 5,
              borderWidth: 0,
              shadowColor: "rgba(0, 0, 0, 0.5)"
            }
          }
        },
        series:[
          {
            type: "map",
            map: "china",
            roam: false,
            zoom: 1.6,
            center: [102, 36],
            data:[],
            // geoIndex: 1,
            aspectScale: 0.80, //长宽比
            showLegendSymbol: false, // 存在legend时显示
            label: {
              normal: {
                show: false
              },
              emphasis: {
                show: false,
                textStyle: {
                  color: "#fff"
                }
              }
            },
            itemStyle: {
              normal: {
                areaColor: "#0d0059",
                borderColor: "#389dff",
                borderWidth: 0.5
              },
              emphasis: {
                areaColor: "#17008d",
                shadowOffsetX: 0,
                shadowOffsetY: 0,
                shadowBlur: 5,
                borderWidth: 0,
                shadowColor: "rgba(0, 0, 0, 0.5)"
              }
            }
          }
        ]
      }
      myChart.setOption(options);
      //随着屏幕大小调节图表
      window.addEventListener("resize", () => {
          myChart.resize();
      });

    },

    initChina(echartData){
      let mapDiv = document.getElementById('china_map');
      let myChart = echarts.init(mapDiv);
      var dataValue = echartData;
      var data1 = dataValue.splice(0, 4);
      var option = {
        series: [
          {
            type: "map",
            map: "china",
            roam: false,
            zoom: 1.6,
            center: [102, 36],
            aspectScale: 0.80, //长宽比
            showLegendSymbol: false, // 存在legend时显示
            label: {
              normal: {
                show: false
              },
              emphasis: {
                show: false
              }
            },
            itemStyle: {
              normal: {
                areaColor: {
                        type: 'linear',
                        x: 0,
                        y: 0,
                        x2: 0,
                        y2: 1,
                        colorStops: [{
                            offset: 0, color: 'rgba(36,83,255,1)'
                        }, {
                            offset: 1, color: 'rgba(10,29,255,1)'
                        }],
                        global: false
                    },
                borderColor: "#389dff",
                borderWidth: 0.5
              },
              emphasis: {
                areaColor: "#17008d",
                shadowOffsetX: 0,
                shadowOffsetY: 0,
                shadowBlur: 5,
                borderWidth: 0,
                shadowColor: "rgba(0, 0, 0, 0.5)"
              }
            }
          },
          {
            name: "",
            type: "scatter",
            coordinateSystem: "geo",
            data: dataValue,
            symbol: "circle",
            symbolSize: 10,
            hoverSymbolSize: 10,
            tooltip: {
              formatter(value) {
                return value.data.name + "<br/>" + "设备数:" + "22";
              },
              show: true
            },
            encode: {
              value: 2
            },
            label: {
              formatter: "{b}",
              position: "right",
              show: false
            },
            itemStyle: {
              color: "#e0eb40"
            },
            emphasis: {
              label: {
                show: false
              }
            }
          },
          //下面是前五产生涟漪动画
          {
            name: "Top 5",
            type: "effectScatter",
            coordinateSystem: "geo",
            data: data1,
            symbolSize: 15,
            tooltip: {
              formatter(value) {
                return value.data.name + "<br/>" + "设备数:" + "22";
              },
              show: true
            },
            encode: {
              value: 2
            },
            showEffectOn: "render",
            rippleEffect: {
              brushType: "stroke",
              color: "#e0eb40",
              period: 9,
              scale: 5
            },
            hoverAnimation: true,
            label: {
              formatter: "{b}",
              position: "right",
              show: true
            },
            itemStyle: {
              color: "#e0eb40",
              shadowBlur: 2,
              shadowColor: "#333"
            },
            zlevel: 1
          }
        ]
      };
      myChart.setOption(option);
      //随着屏幕大小调节图表
      window.addEventListener("resize", () => {
          myChart.resize();
      });
    }
  }
 
};
</script>

<style scoped>
   #china_map{
        height: 100%;
    }
</style>

使用echartChina.vue组件

在需要使用地图的组件,直接引入即可,然后把需要展示的坐标地点传给地图组件,全部代码如下:

<template>
  <div class="echartChina">
    <EchartChina ref="myEchart4"/>
  </div>
</template>
<script>
import EchartChina from '@/components/bigEcharts/echartChina'
export default {
    data(){
      return {
         geoCoordMap:{
          哈尔滨: [126.63, 45.75],
          北京: [116.46, 39.92],
          广州: [113.23, 23.16],
          上海: [121.48, 31.22],
          郑州: [113.65, 34.76],
          厦门: [118.1, 24.46],
          杭州: [120.19, 30.26],
          攀枝花: [101.718637, 26.582347],
          东莞: [113.75, 23.04],
          广州: [113.23, 23.16],
          太原: [112.53, 37.87],
          拉萨: [91.11, 29.97],
          昆明: [102.73, 25.04],
          深圳: [114.07, 22.62],
          宿迁: [118.3, 33.96],
          佛山: [113.11, 23.05],
          海口: [110.35, 20.02],
          江门: [113.06, 22.61],
          大连: [121.62, 38.92],
          沈阳: [123.38, 41.8],
          长春: [125.35, 43.88],
          吉林: [126.57, 43.87],
          宜宾: [104.56, 29.77],
          呼和浩特: [111.65, 40.82],
          成都: [104.06, 30.67],
          桂林: [110.28, 25.29],
          齐齐哈尔: [123.97, 47.33],
          张家界: [110.479191, 29.117096],
          宜兴: [119.82, 31.36],
          西安: [108.95, 34.27],
          遵义: [106.9, 27.7],
          鄂尔多斯: [109.781327, 39.608266],
          潍坊: [119.1, 36.62],
          徐州: [117.2, 34.26],
          衡水: [115.72, 37.72],
          乌鲁木齐: [87.68, 43.77],
          开封: [114.35, 34.79],
          济南: [117, 36.65],
          南充: [106.110698, 30.837793],
          天津: [117.2, 39.13],
          聊城: [115.97, 36.45],
          芜湖: [118.38, 31.33],
          唐山: [118.02, 39.63],
          丽水: [119.92, 28.45],
          洛阳: [112.44, 34.7],
          秦皇岛: [119.57, 39.95],
          株洲: [113.16, 27.83],
          石家庄: [114.48, 38.03],
          长沙: [113, 28.21],
          衢州: [118.88, 28.97],
          合肥: [117.27, 31.86],
          武汉: [114.31, 30.52],
          大庆: [125.03, 46.58]
         }
      }
    },
    components:{
        EchartChina,
    },
    mounted(){
       const {geoCoordMap} = this
       this.initChinaMap(geoCoordMap)
    },
    methods:{
      dealWithData(geoCoordMap) {
        var mapData = geoCoordMap
        var data = [];
        for (var key in mapData) {
          data.push({ name: key, value: mapData[key] });
        }
        return data;
      },
      initChinaMap(geoCoordMap){
         var chinaData = this.dealWithData(geoCoordMap)
         this.$nextTick(() => {
           this.$refs.myEchart4.initEchartMap()
           this.$refs.myEchart4.initChina(chinaData)
         })
      }
    }
}
</script>
<style lang='less' scoped>
.echartChina{
    height:100%;
    width: 100%;
    position: relative;
}
</style>

修改标记图标为图片

在这里插入图片描述

...
//引入图片
import gaoji from '@/assets/images/gaoji.png'
import chache from '@/assets/images/chache.png'
...
  {
     name: "",
     type: "scatter",
     coordinateSystem: "geo",
     data: dataValue,
     symbol: function(value,param){
        if(param.data.type == 0){
           return "image://" + chache;
        }else{
            return "image://" + gaoji;
        }
     },
     symbolSize: 20,
     hoverSymbolSize: 20,
   },

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

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

相关文章

matlab求解方程和多元函数方程组

核心函数solve 一般形式 Ssolve(eqns,vars,Name,Value) &#xff0c;其中&#xff1a; eqns是需要求解的方程组&#xff1b; vars是需要求解的变量&#xff1b; Name-Value对用于指定求解的属性&#xff08;一般用不到&#xff09;&#xff1b; S是结果&#xff0c;对应于v…

【MySQL高级篇笔记-主从复制(下) 】

此笔记为尚硅谷MySQL高级篇部分内容 目录 一、主从复制概述 1、如何提升数据库并发能力 2、主从复制的作用 二、主从复制的原理 1、原理剖析 2、复制的基本原则 三、一主一从架构搭建 1、准备工作 2、主机配置文件 3、从机配置文件 4、主机&#xff1a;建立账户并…

如何通过CRM系统进行群发邮件?

CRM客户管理软件不仅可以记录客户的信息&#xff0c;还可以集成电子邮箱&#xff0c;实现在CRM中即可管理客户邮件的功能。那么&#xff0c;CRM系统可以群发邮件吗&#xff1f;当然可以&#xff01;使用Zoho CRM即可轻松实现邮件群发。 1、通过Zoho CRM群发邮件的好处 1&…

对话钉钉音视频专家冯津伟:大模型不是万能的

策划&#xff1a;LiveVideoStack 在音视频技术领域&#xff0c;ICASSP 大会是行业的风向标会议&#xff0c;也是语音学界从业者研究下一代技术发展的盛宴。近期&#xff0c;国内外各大企业陆陆续续放出论文入顶会的消息&#xff0c;钉钉蜂鸣鸟音频实验室 2 篇论文也登上了 ICAS…

「2024」预备研究生mem-从不同备选池选元素从相同备选池选元素-仅分推

一、从不同备选池选元素 至少错误的解体&#xff1a; 其他方法&#xff1a; 二、从相同备选池选元素-仅分推 三、练习题 至少问题

【工具篇】Maven加密Nexus用户密码

背景说明 按照DevOps三级要求&#xff0c;Maven工具发布Nexus帐号不能使用明文密码&#xff0c;需要对settings.xml文件中的password密码进行加密存储。下面就说一下具体的加密过程及配置方法。 环境说明 Maven&#xff1a;Apache Maven 3.6.3 Nexus&#xff1a;OSS 3.29.2-…

设计用户模块的schema

schema 在计算机科学中&#xff0c;schema通常指的是 数据结构的定义和约束。 关系型数据库 在关系型数据库中&#xff0c;schema指的是数据库中所有表格的定义和表格之间的关系约束&#xff0c;包括每个表格的列名、数据类型、主键、外键等等。 如果要对一个关系型数据库进行…

在没有实验数据的情况下,如何高效快速发表论文

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…

互联网一线大厂Java面试题大全带答案 1110道(持续更新)

前言 春招&#xff0c;秋招&#xff0c;社招&#xff0c;我们 Java 程序员的面试之路&#xff0c;是挺难的&#xff0c;过了 HR&#xff0c;还得被技术面&#xff0c;小刀在去各个厂面试的时候&#xff0c;经常是通宵睡不着觉&#xff0c;头发都脱了一大把&#xff0c;还好最终…

平台稳定性里程碑 | Android 14 Beta 3 发布

作者 / Dave Burke, VP of Engineering 随着今天 Android 14 Beta 3 的发布&#xff0c;我们随之进入到 Android 开发周期的下一个阶段。Beta 3 依旧围绕着我们的核心主题打造&#xff0c;即隐私、安全、性能、开发者生产力和用户定制&#xff0c;同时继续完善平板电脑、可折叠…

基础知识学习---排序算法

1、本栏用来记录社招找工作过程中的内容&#xff0c;包括基础知识学习以及面试问题的记录等&#xff0c;以便于后续个人回顾学习&#xff1b; 暂时只有2023年3月份&#xff0c;第一次社招找工作的过程&#xff1b; 2、个人经历&#xff1a; 研究生期间课题是SLAM在无人机上的应…

Rsync工具的详细介绍以及定时备份案例

RSYNC 什么是RSYNC rsync是类unix下的一款数据镜像备份工具——remote sync。 Rsync 的基本特点如下&#xff1a; 可以镜像保存整个目录树和文件系统&#xff1b;可以很容易做到保持原来文件的权限、时间、软硬链接等&#xff1b;无须特殊权限即可安装&#xff1b;优化的流…

Java中的Lambda表达式详解

文章目录 什么是LambdaLambda表达式的语法Lambda表达式的应用场景GUI应用Lambda表达式的优缺点总结 什么是Lambda java中的Lambda表达式是一种函数式编程的风格&#xff0c;它允许我们将代码作为数据传递&#xff0c;并在需要时执行。Lambda表达式能够极大地简化代码&#xff0…

WPF开发txt阅读器9:语音播放及其进度监控

文章目录 播放进度光标跟踪进度条 txt阅读器系列&#xff1a; 需求分析和文件读写目录提取类&#x1f48e;列表控件与目录字体控件绑定&#x1f48e;前景/背景颜色书籍管理系统&#x1f48e;用树形图管理书籍语音播放 播放进度 SpeechSynthesizer对象可以注册Speech_SpeakPr…

安洵杯SYCCTF2023 writeup

一、MISC 1.sudoku_easy 简单的数独交互&#xff0c;几个小注意点&#xff0c;每次发送level之后sleep5秒才会返回题目 将形如 --------------------- 800103720 023840650 410006008 300001062 000052407 072060090 160000375 205019846 000030000 --------------------- 转换…

django中url和视图函数path re_path views.py

目录 url的定义url的格式django中的urldjango中的创建自己的urldjango访问测试django中的path动态django中的path动态案例django中的path动态类型django中的path动态案例-计算器django的正则路由re_path() url的定义 url 统一资源定位符 url 用来表示互联网上某个资源的地址 …

邀请媒体参加活动的邀请函应该怎么写

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 经常有小伙伴问媒体邀请函怎么写&#xff0c;今天胡老师就把媒体邀请函的一个大概格式分享出来&#xff0c;不论是 做成什么形式的邀请函&#xff0c;这几点都不可少。 主题&#xff1a;…

数据库的基本概念

数据库的基本概念 数据&#xff08;Data&#xff09; 描述事物的符号记录 包括数字、文字、图形、声音、档案记录等 以“记录”形式按统一的格式进行存储 表 将不同的记录组织在一起 用来存储具体数据 数据库 表的集合&#xff0c;是存储和管理数据的仓库 数据库管理…

linuxOPS基础_进程查看与管理

进程与程序的关系 进程是正在执行的一个程序或命令&#xff0c;每个进程都是一个运行的实体&#xff0c;并占用一定的系统资源。程序是人使用计算机语言编写的可以实现特定目标或解决特定问题的代码集合。 ​ 简单来说&#xff0c;程序是人使用计算机语言编写的&#xff0c;可…

三菱FX5U系列PLC之间进行简易PLC间链接功能的具体方法

三菱FX5U系列PLC之间进行简易PLC间链接功能的具体方法 功能介绍: 在最多8台FX5U或者FX3U PLC之间通过RS-485通信方式连接,进行软元件相互链接的功能。 接线注意事项: 根据链接模式和所使用的从站数量的不同,链接软元件的占用点数也有所变化。根据链接软元件的起始编号,对占…