echarts地图 省-市-县

news2025/1/23 17:48:14

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

// 直接用就行,已经是组件了
// 数据来源地址
http://datav.aliyun.com/portal/school/atlas/area_selector#&lat=31.769817845138945&lng=104.29901249999999&zoom=4
//  例面的china.geo.json文件见https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json
<template>
    <div class="echart_bmap_wrapper">
        <el-button class="btn" type="primary" @click="goBack" size="mini">全国</el-button>
      <div class="bmap-box" id="bmapChartBox"></div>
    </div>
  </template>
  <script>

  import * as echarts from 'echarts';
  var provinceMapData = require('@/utils/china.geo.json');//全国地图省份数据,自己取上面地址取
  import axios from 'axios'//采用axios动态请求数据
  export default {

    name: 'echartBmap',
    data() {
      return {
        pointData: [],//标点信息,需要动态获取,初始化全国地图的点位
        provinceCodeData: [],//处理后全国省份数据带code
        mapStack: [],//存储一下地图历史记录,用于返回
        nowChooseData: [],//当前选择的数据源
        publicUrl:"https://geo.datav.aliyun.com/areas_v3/bound/",
        option: {
            tooltip: {
                show: true,
                trigger: 'item',
                backgroundColor: 'transparent',
                padding:[0,0,0,0],
                className: 'custom-tooltip',
                borderWidth :0,
                formatter: function (params) {
                    // console.log(params);
                    var str = `<div style = " color:#fff;background-color:none;position: relative;">
                        <img src='${require("../../assets/largeScreen/mapAleart.png")}' style="width:200px;height:250px;display: inline-block;position: absolute;top:0;left:0"></img>
                        <div style="width:200px;height:250px;padding:15px 10px;font-size:12px;position: absolute;top:0px;left:0;z-index:2">
                            <div style='margin:3px 10px;text-align:center;font-size:14px'>
                                <div style='float:left'>山A888888</div>  
                                <div style='float:right'>用车中</div>
                            </div>
                            <div style='margin:3px 10px;margin-top:8px'>车系:宝马</div>
                            <div style='margin:3px 10px;'>车型:SUV</div>
                            <div style='margin:3px 10px;'>姓名:王益</div>
                            <div style='margin:3px 10px;'>手机号:157368236868</div>
                            <div style='background: rgba(0,20,29,0.27);margin:5px 10px;text-align:center;border-radius:5px'>交强险2021-11-11到期</div>
                            <div style='background: rgba(0,20,29,0.27);margin:5px 10px;text-align:center;border-radius:5px'>设备脱离告警</div>
                            <div style='background: rgba(0,20,29,0.27);margin:5px 10px;text-align:center;border-radius:5px'>车辆维保中</div>
                        </div>
                
                    </div>`
                    return str
                },

            },
          geo: [{
            map: 'js',
            aspectScale: 0.9,
            roam: true, // 是否允许缩放
            zoom: 1.1, // 默认显示级别
            center: [116.405285, 39.904989], // 地图中心点坐标
            label: {
              normal: {
                show: true, // 是否地图显示区域的文字,各省市的名字
                textStyle: {
                  color: '#fff',
                  fontSize: "8", //省份字体大小
                }
              },
              emphasis: {
                textStyle: {
                  color: '#fff'
                }
              }
            },
            itemStyle: {
              // 区域颜色
              areaColor: {
                type: 'radial',
                x: 0.7,
                y: 0.5,
                r: 0.4,
                // 渐变效果
                colorStops: [{
                  offset: 0,
                  color: '#24cff4' // 0% 处的颜色
                }, {
                  offset: 0.5,
                  color: '#2babd9' // 50% 处的颜色
                }, {
                  offset: 1,
                  color: '#236bb2' // 100% 处的颜色
                }],
                global: false // 缺省为 false
              },
              emphasis: {
                areaColor: '#56dcf9', // 鼠标移入区域背景颜色
                borderWidth: 0
              },
              borderColor: '#37C1FD',
              borderWidth: 2
            },
            emphasis: {
              itemStyle: {
                areaColor: '#0160AD'
              },
              label: {
                show: 1,
                color: '#fff'
              }
            },
            zlevel: 3
          }],
          series: [{
            type: 'effectScatter',
            coordinateSystem: 'geo',
            // symbol: 'diamond',
            showEffectOn: 'render',
            rippleEffect: {
              period: 10,
              scale: 6,
              brushType: 'fill'
            },
            zlevel: 10, // 这里是关键,一定要放在 series中,显示层级,
            hoverAnimation: true,
            itemStyle: {
              normal: {
                // 点的颜色可以根据 params 参数里面的值去设定不通的颜色
                color: function (params) {
                  if (params.name == '7300网关') {
                    return 'red';
                  }
                  if (params.name == '700网关') {
                    return 'yellow';
                  }
                  if (params.name == '5300网关') {
                    return 'green';
                  }else{
                    return 'pink';
                  }
   
                },
                shadowBlur: 10,
                shadowColor: '#333'
              }
            },
            data: [] // 点的数据,包含经纬度
          }]
        },
        // 测试标点数据
        gatewayPointData: {
          '黑龙江省': [
            {
              name: '7300网关',
              value: [126.642464, 45.756967]
            },
          ],
          '哈尔滨市': [
            {
              name: '7300网关',
              value: [126.957401, 45.454116]
            },
            {
              name: '700网关',
              value: [126.394846, 45.778706]
            },
            {
              name: '5300网关',
              value: [126.606415, 45.807463]
            },
            {
              name: '300网关',
              value: [126.483958, 45.876779]
            },
            {
              name: '2300网关',
              value: [126.785501, 45.739871]
            }
          ],
        },
   
        popShow: false,//弹窗是否显示
        popLeft: 0,//弹窗X轴距离
        popTop: 0,//弹窗Y轴距离
        name: '',//当前点击省份
      };
    },
    mounted() {
      // 渲染地图
      this.drawMap(provinceMapData, 0, [126.82862, 49.296976]);
      this.getProvinceCode();//处理全国省份数据
      // 初始化mapStack数据,默认全国数据
      this.mapStack = []
      this.mapStack.push(provinceMapData)
    },
    methods: {
      // 处理全国省份数据
      getProvinceCode() {
        provinceMapData.features.forEach(item => {
          this.provinceCodeData.push({
            name: item.properties.name,
            coordinateCenter: item.properties.center,
            cityCode: item.properties.adcode
          })
        });
      },
      // 返回全国
      goBack() {
        this.popShow = false
        this.mapStack = []
        this.mapStack.push(provinceMapData)
        this.drawMap(provinceMapData, 0, [126.82862, 49.296976]);
        
      },
      // 设置地图配置信息
      setMapCenterZoomData(data, zoom, center) {
        this.option.series[0].data = data;
        this.option.geo[0].zoom = zoom;
        this.option.geo[0].center = center;
   
        if (this.mapStack.length <= 1) {//设置图层位置
          this.option.geo[0].layoutSize = '100%';
          this.option.geo[0].layoutCenter = ['85%', '20%'];
        } else {
          this.option.geo[0].layoutSize = '';
          this.option.geo[0].layoutCenter = [];
        }
   
      },
      // 渲染地图
      drawMap(json, type = 0, city) {
        // 防止echarts重复
        if (document.getElementById('bmapChartBox') == null) {
          return
        }
        echarts.dispose(document.getElementById('bmapChartBox'))
        // 防止echarts重复
   
        this.echarts = echarts;
        this.dom = document.getElementById('bmapChartBox');
        this.myChart = this.echarts.init(this.dom);
        this.echarts.registerMap('js', json);
   
        if (type == 1) {//地图点击进入
          this.pointData = this.gatewayPointData[city];//标点数据
          if(this.pointData){//如果有标点数据
            console.log(this.pointData,1)
            this.setMapCenterZoomData(this.pointData, 1.2, this.pointData[0].value);
          }else{//如果没有标点数据
            // 使用测试数据 - 把当前选择地图数据作为标点数据
            this.nowChooseData.forEach(i=>{
              i.value = i.coordinateCenter
            })
            this.pointData = this.nowChooseData
            console.log(this.pointData,2)
            var center = this.nowChooseData[0].coordinateCenter;//取当前选择省市区第一个数据的坐标
            this.setMapCenterZoomData(this.pointData, 1.2, center);
          }
        } else {//初始化进入
          this.myChart.clear();
          console.log(this.pointData,3)
          this.setMapCenterZoomData([[111.670801, 40.818311],[109.840405, 40.658168]], 1, [126.82862, 49.296976]);
        }
        this.myChart.setOption(this.option);
        this.myChart.off('click');
        this.myChart.on('click', (param) => {
          // 点击弹窗方法
          // 点击获取经纬度
          let data = this.myChart.convertFromPixel('geo', [param.event.event.offsetX, param.event.event.offsetY])
          this.popLeft = param.event.event.offsetX
          this.popTop = param.event.event.offsetY
          // 获取城市名称 list下的name值
          this.name = param.name
          this.popShow = true
          // 点击弹窗方法
   
          if (param.componentType == "geo") {//点击地图
   
          } else {//点击标点不允许下钻
            return;
          }
          // 省市区三级后跳出点击
          if (this.mapStack.length >= 3) {
            this.$notify({
              message: '没有更多啦!',
              type: 'warning',
              duration: 2000
            });
            return;
          }
   
          const city = param.name;
          // 获取点击对应的cityCode
          var cityCode = ''
          if (this.mapStack.length <= 1) {//初始化全国省份数据
            this.provinceCodeData.forEach(i => {
              if (i.name == city) {
                cityCode = i.cityCode
              }
            })
          } else {//选择后的市区数据
            this.nowChooseData.forEach(i => {
              if (i.name == city) {
                cityCode = i.cityCode
              }
            })
          }
   
          this.getHomeMapData(city, cityCode)
        });
      },
      // 获取基础配置数据
      getHomeMapData(city, cityCode) {
        var cityMapData //当前选中的省市区地图数据
        // 请求数据
        
        var data
        if( cityCode == 710000){//台湾特殊处理,后缀没有_full
          data = cityCode
        
        }else{
          data =  cityCode + '_full.json'
          
        }
        //通过接口获取点击下钻的地图数据
        
        axios.get(this.publicUrl+data).then(res => {
            console.log(res)
          if (res) {
            cityMapData = res.data
            // 让历史数据一直保持在3个之内,存储显示过的地图数据
            if (this.mapStack.length < 3) {
              this.mapStack.push(cityMapData);
            }
            this.nowChooseData = []
            cityMapData.features.forEach(item => {
              this.nowChooseData.push({
                name: item.properties.name,
                coordinateCenter: item.properties.center,
                cityCode: item.properties.adcode
              })
            });
            cityMapData && this.myChart.clear();
            cityMapData && this.drawMap(cityMapData, 1, city);
          }
   
        }).catch((err) => {
          this.$message(err.message);
        });
      },
   
   
    }
  };
  </script>
  <style lang="scss" scoped>
  .echart_bmap_wrapper {
    position:relative;
    .btn {
      position: absolute;
      left: 20px;
      top: 20px;
      z-index: 1;
    }
   
    .bmap-box {
      width:29vw;
      height: 68vh;
    }
   
    .popWin {
      position: absolute;
      left: 0;
      top: 0;
      background: #00305c;
      background-size: 100% 100%;
      width: 408px;
      height: 300px;
      z-index: 100;
   
      .popLine {
        width: 340px;
        height: 1px;
        background: linear-gradient(90deg, #FFFFFF 0%, rgba(255, 255, 255, 0) 100%);
        opacity: 0.3;
        margin-left: 30px;
      }
   
      .titleInfos {
        text-align: center;
        margin-left: 30px;
        font-size: 22px;
        font-family: YouSheBiaoTiHei;
        font-weight: 400;
        color: #00FDFE;
        height: 50px;
        display: flex;
        justify-content: flex-start;
        align-items: center;
        flex-wrap: nowrap;
        flex-direction: row;
        align-content: flex-start;
        .pop_close{
          color:#bbb;
          cursor: pointer;
          padding:5px;
          font-size:12px;
          position: absolute;
          top: 5px;
          right: 10px;
        }
      }
    }
   
    .infoBody {
      width: 100%;
      padding:3%;
      .homeTable{
        border:1px solid #0376ae;
        border-radius: 10px;
      }
    }
    .infoBody ::v-deep .plTableBox .el-table .cell.el-tooltip{
      border-bottom: 1px solid #086896;
    }
    .infoBody ::v-deep  .el-table, .el-table__expanded-cell {
      background-color: transparent;
    }
    .infoBody ::v-deep .el-table tr {
      // background-color: transparent!important;
      background-color: #0b4d73;
    }
    .infoBody ::v-deep  .el-table--enable-row-transition .el-table__body td, .el-table .cell{
      background-color: transparent;
    }
    .el-table::before {//去除底部白线
      left: 0;
      bottom: 0;
      width: 100%;
      height: 0px;
    }
    .infoBody ::v-deep  .plTableBox .el-table .el-table__header th{
      background-color: transparent;
      
    }
    .infoBody ::v-deep .plTableBox .el-table--enable-row-hover .el-table__body tr:hover>td{
      background-color: rgba(0,77,167,1);
    }
    .infoBody ::v-deep .plTableBox .el-table--border td,.infoBody ::v-deep  .plTableBox .el-table--border th,.infoBody ::v-deep  .plTableBox .el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{
      border: none;
      color:#4daad3
    }
    .infoBody ::v-deep .plTableBox .el-table--medium td{
      padding: 0;
    }
    .infoBody ::v-deep .plTableBox .el-table__header-wrapper{
      background-color: transparent;
    }
    .infoBody ::v-deep .plTableBox .el-table--striped .el-table__body tr.el-table__row--striped td{
      background-color: #103c5c;
    }
  }
  </style>

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

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

相关文章

将vue项目通过electron打包成windows可执行程序

将vue项目打包成windows可执行程序 1、准备好dist将整个项目打包 npm run build2、安装electron依赖 npm install electron --save-dev npm install electron-packager --save-dev"electron": "^13.1.4", "electron-packager": "^15.2.0…

【Unity】坐标转换经纬度方法(应用篇)

【Unity】坐标转换经纬度方法&#xff08;应用篇&#xff09; 解决地图中经纬度坐标转换与unity坐标互转的问题。使用线性变换的方法&#xff0c;理论上可以解决小范围内所以坐标转换的问题。 之前有写过[Unity]坐标转换经纬度方法&#xff08;原理篇),在实际使用中&#xff0c…

外卖福利来了,以后都10元以下了

扫最后面的二维码注册&#xff0c;收藏起来&#xff0c;是个网页 使用方法&#xff1a; 纯订单 不需要评价 消费反馈 需要上传评价的截图 没要求的最少一张照片 有要求的按要求 看清美团还是饿了么 不能夸平台 美团不能修好评价 饿了么可以改一下

linux学习(文件描述符)[12]

输出重定向 本质在OS内部&#xff0c;更改fd对应内容的指向 #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>//myfile helloworld //int main(int argc,…

MySQL语法及常用数据类型

一、SQL语言概述 对数据库进行查询和修改操作的语言叫做SQL。SQL的含义就是结构化查询语言&#xff08;Structured Query Language&#xff09;。SQL包含以下4个部分&#xff1a; 1、数据定义语言&#xff08;DDL&#xff09;&#xff1a;DROP、CREATE、ALTER等语句&#xff…

这些选品神器,跨境卖家都在用

相信许多跨境电商商家至今不懂得如何选品&#xff0c;不会选&#xff1f;选什么类目&#xff1f;在哪选&#xff1f; 今天给大家整理一波实用选品工具&#xff0c;赶紧来码住。 1、TikTok 在国外流行着这么一句话:“TikTok mademe buyit”。 TikTok有超过 20亿的流量&#x…

ReentrantLock源码解析

定义 可重入锁&#xff0c;对于同一个线程可以重复获得此锁。分为FailLock和NonfairLock。 加锁就是将exclusiveOwnerThread设置为当前线程&#xff0c;且将status加一&#xff0c;解锁就status-1&#xff0c;且exclusiveOwnerThread设置为null。 公平锁&#xff1a;根据先来后…

C# Linq源码分析之Take (三)

概要 本文在前两篇Take源码分析的基础上&#xff0c;着重分析Range参数中有倒数的情况&#xff0c;即分析TakeRangeFromEndIterator的源码实现。 源码及分析 TakeRangeFromEndIterator方法用于处理Range中的开始和结束索引存在倒数的情况。该方法位于Take.cs文件中。通过yie…

Android4:约束布局

创建项目My Constraint Layout 一般创建项目之后activity_main.xml文件默认就是采用约束布局&#xff0c;如&#xff1a; <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayoutxmlns:android"http:…

FastDFS文件管理知识点+案例分析

一 介绍FastDFS 原理 FastDFS开源分布式文件系统由C语言编写实现, 可以通过专有API访问&#xff0c;目前提供了C、Java和PHP API。 FastDFS是一个开源的轻量级分布式文件系统&#xff0c;它对文件进行管理&#xff0c;功能包括&#xff1a;文件存储、文件同步、文件访问&#x…

scala中json4s 使用详解

预备知识 json4s的数据结构AST (Abstract Syntax Tree)。 sealed abstract class JValue case object JNothing extends JValue // zero for JValue case object JNull extends JValue case class JString(s: String) extends JValue case class JDouble(num: Double) extend…

企业需求如何精准对接科研院校科技成果?

一系列科技成果转化相关政策、法律法规的出台&#xff0c;正在破除高校科技成果转化机制上的桎梏。企业科技创新的需求也越来越大&#xff0c;也充分意识到与高校合作对于推动企业发展的重要性&#xff0c;对接科技成果的热情高涨&#xff0c;合作越来越频繁。但是也存在不成功…

SpringBoot 的 RedisTemplate、Redisson

一、Jedis、Lettuce、Redisson的简介 优先使用Lettuce&#xff0c; 需要分布式锁&#xff0c;分布式集合等分布式的高级特性&#xff0c;添加Redisson结合使用。 对于高并发&#xff0c;1000/s的并发&#xff0c;数据库可能由行锁变成表锁&#xff0c;性能下降会厉害。 1.1、…

linux中ubuntu安装hashcat方法以及使用GPU破解

一、linux安装hashcat git clone https://github.com/hashcat/hashcat.git make make install二、安装驱动 驱动版本安装大全&#xff1a;https://developer.nvidia.com/cuda-toolkit-archive 查看自己显卡选择对应的版本&#xff0c;根据下面命令无脑安装就行了 wget https:/…

誉天华为数通Datacom HCIE认证课程

作为当前网络领域最具含金量的认证之一&#xff0c;华为Datacom HCIE认证不仅是网络工程师们技术能力的证明&#xff0c;也是未来行业趋势的风向标。 尽管经历了几度版本更迭、考题变化&#xff0c;但是誉天一直紧跟技术发展趋势&#xff0c;在专业领域和教学内容上始终与当前的…

生成国密密钥对

在线生成国密密钥对 生成的密钥对要妥善保管&#xff0c;丢失是无法找回的。

奇迹MU服务端IGC架设流程

奇迹MU服务端IGC架设流程 大家好我是艾西&#xff0c;今天跟大家简单聊下奇迹IGC服务端。IGC端是国外的东西全英文大家感兴趣的话也可以自己研究研究&#xff0c;整体的东西还是非常完整。扩展以及端的稳定性还是非常不错的就是有点费脑子........&#xff08;此教程为个人娱乐…

WebStorm运行vue项目

WebStorm运行vue项目&#xff08;vue2&#xff09; 1.安装webstorm 2. 需要安装node.js 环境&#xff0c;可以去官网下载 https://nodejs.org/en 3. 安装完需要查看 按winr 输入cmd进入 输入命令node -v 和npm -v 查看&#xff0c;会出现相应的版本号,代表安装成功 vue官网安…

IC设计中主要的EDA工具有哪些? (内附EDA虚拟机安装资源)

EDA工具的使用涵盖了芯片的功能设计、综合、验证、物理设计等环节&#xff0c;更是被称作“芯片设计的工作母机”。下面就来为大家具体介绍一下常见的EDA工具。&#xff08;需要EDA虚拟机安装资源文末可领取~&#xff09; 什么是EDA&#xff1f; EDA是电子设计自动化&#xf…

对象存储服务-MinIO基本集成

是什么 MinIO 是一个高性能的分布式对象存储服务&#xff0c;适合存储非结构化数据&#xff0c;如图片&#xff0c;音频&#xff0c;视频&#xff0c;日志等。对象文件最大可以达到5TB。 安装启动 mkdir -p /usr/local/minio cd /usr/local/minio# 下载安装包 wget https:/…