当前位置: 首页 > news >正文

用 echarts 开发地图、点击展示自定义信息框

1、下载所需地市的json   链接:DataV.GeoAtlas地理小工具系列 

      在右侧输入需要的名称,然后下载json文件到本地

2、在html 中准备容器,并设置宽高

<div id="mapContent">

    <div ref="mapChart" style="width:100%;height:100%;margin-bottom: 0" />

</div>

#mapContent {

  width: 100%;

  height: 100%;

}

3、导入echarts 和 json 文件

import * as echarts from 'echarts'

import json_150000 from '@/static/neimenggu/county/150000.json'

4、处理数据

//data 数据 

data() {

    return {

      charts: null,

      mapjson: json_150000,

      codeToJson: {

        '150000': json_150000

      },

     mapOptions:{},

      cityName: {

        呼和浩特市: {

             value: '',

             jcz: '',

             kc: '',

             fwz: ''

        },

        ...................

    

      },

     cityCodeAndName:{

           '150100000000' :'呼和浩特市',

           '150700000000' :'呼伦贝尔市',

            '150200000000' :'包头市',

             ...................................

    }

}

5、初始化方法

   initEcharts(areaCode) {

      const name = 'json_' + areaCode

      const cityName = this.cityName

      const mapjson = this.codeToJson[areaCode]

      if (this.charts) {

        this.charts.clear()

      } else {

        this.charts = echarts.init(this.$refs.mapChart)

      }

      const top = 28

      const zoom = 1.2 //地图缩放层级(控制地图大小)

      const option = {

        backgroundColor: 'rgba(0,0,0,0)',

        tooltip: {

          show: false

        },

        legend: {

          show: false

        },

        grid: {

          height: '100%'

        },

        geo: {

          map: name,

          roam: false,

          selectedMode: false, // 是否允许选中多个区域

          zoom: zoom,

          top: top,

          show: false

        },

        series: [

          {

            name: 'MAP',

            type: 'map',

            map: name,

            label: {

              show: false,

              color: '#fff'

            },

            showLegendSymbol: false,

            data: [],

            selectedMode: 'single', // 是否允许选中多个区域

            zoom: zoom,

            geoIndex: 1,

            top: top,

            tooltip: {

              show: true,

              formatter: function(params) {

                return params.name + '(' + cityName[params.name].value + ')'

              }, //内容

              backgroundColor: 'rgba(0,0,0,.6)', //提示框样式

              borderColor: 'rgba(147, 235, 248, .8)',

              textStyle: {

                color: '#FFF'

              },

              triggerOn: 'click'

            },

            emphasis: {

              //划过区域时,样式设置

              label: {

                show: false //是否显示区域名称(在面积中)

              },

              itemStyle: {

                areaColor: '#389BB7', //区域的面积颜色

                borderWidth: 1 //区域边框

              }

            },

            select: {

              disabled: true

            },

            //区域样式设置

            itemStyle: {

              borderColor: '#2084bc',

              borderWidth: 2,

              areaColor: {

                type: 'radial',

                x: 0.5,

                y: 0.5,

                r: 0.8,

                colorStops: [

                  {

                    offset: 0,

                    color: 'rgba(147, 235, 248, 0)' // 0% 处的颜色

                  },

                  {

                    offset: 1,

                    color: 'rgba(147, 235, 248, .2)' // 100% 处的颜色

                  }

                ],

                globalCoord: false // 缺为 false

              },

              shadowOffsetX: -2,

              shadowOffsetY: 2,

              shadowBlur: 10

            }

          }

        ]

      }

      this.mapOptions = option

      echarts.registerMap(name, mapjson)

      //处理数据

      const jsonData = this.getGeoCoordMap(mapjson)

      this.mapOptions.series[0].data = jsonData

      const that = this

      //给区域添加点击事件

      this.charts.on('click', function(params) {

        //先移除上个标签

        const popDiv = document.getElementById('popup')

        if (popDiv) {

          document.getElementById('mapContent').removeChild(popDiv)

        }

        // 自定义弹框

        var popup = document.createElement('div')

        popup.id = 'popup'

        popup.style.position = 'absolute'

        popup.style.left = params.event.event.clientX - 90 + 'px'

        popup.style.top = params.event.offsetY - 120 + 'px'

        popup.style.backgroundColor = '#22312f'

        popup.style.zIndex = 999

        popup.style.padding = '0 20px'

        popup.style.borderRadius = '10px'

        popup.innerHTML =

          '<div id="nmgInfoWindow">' +

          '<div class="title">' +

          params.data.name +

          '详情<i class="el-icon-close closebt" id = "closeBtn"></i></div>' +

          '<div class="items"> <span style="color:#62b2bc;">项目一</span><span>' +

          '<span style="color:#62b2bc;">' +

          cityName[params.data.name].jcz +

          '</span>' +

          '<i class="el-icon-arrow-right toDetail" style="color:#62b2bc;"></i></span>' +

          '</div>' +

          '<div class="items"> <span style="color:#62b2bc;">项目二</span><span>' +

          '<span style="color:#62b2bc;">' +

          cityName[params.data.name].kc +

          '</span>' +

          '<i class="el-icon-arrow-right toDetail" style="color:#62b2bc;"></i></span>' +

          '</div>' +

          '<div class="items"> <span style="color:#62b2bc;">项目三</span><span>' +

          '<span style="color:#62b2bc;">' +

          cityName[params.data.name].fwz +

          '</span>' +

          '<i class="el-icon-arrow-right toDetail " style="color:#62b2bc;"></i></span>' +

          '</div>' +

          '</div>'

        //添加到页面上

        document.getElementById('mapContent').appendChild(popup)

        //给自定义弹框中添加关闭事件

        const closeButton = document.querySelector('#closeBtn')

        closeButton.addEventListener('click', function() {

          const popDiv = document.getElementById('popup')

          if (popDiv) {

            document.getElementById('mapContent').removeChild(popDiv)

          }

        })

        //给自定义弹框中的按钮跳转事件

        const detailButton = document.querySelectorAll('.toDetail')

        detailButton.forEach((item, index) => {

          item.addEventListener('click', function() {

             console.log('点击事件',that)

          })

        })

      })

      this.charts.setOption(option)

    },

 getGeoCoordMap(mapjson) {

      const mapFeatures = mapjson.features

      const cityCenter = {}

      mapFeatures.map((item) => {

        cityCenter[item.properties.name] = item.properties.centroid || item.properties.center || []

      })

      const newData = []

      mapFeatures.map((item) => {

        if (cityCenter[item.properties.name]) {

          newData.push({

            name: item.properties.name,

            value: cityCenter[item.properties.name],

            adcode: item.properties.adcode

          })

        }

      })

      return newData

    }

6、结果

相关文章:

用 echarts 开发地图、点击展示自定义信息框

1、下载所需地市的json 链接&#xff1a;DataV.GeoAtlas地理小工具系列 在右侧输入需要的名称&#xff0c;然后下载json文件到本地 2、在html 中准备容器&#xff0c;并设置宽高 <div id"mapContent"> <div ref"mapChart" style"width:10…...

Android 应用兼容性变更调试

引言 本文将介绍如何调试和解决这些兼容性问题,并记录调试过程中实际操作的步骤和方法。在Android应用开发中,随着Android系统版本的不断更新,应用的兼容性问题变得越来越复杂。 推荐:《Android系统开发中高级定制专栏导读》08-03 16:04:53.518 6555 6555 D Compatibili…...

76 多态

多态&#xff08;polymorphism&#xff09;是指基类的同一个方法在不同派生类对象中具有不同的表现和行为。 派生类继承了基类的行为和属性之后&#xff0c;还会增加某些特定的行为和属性&#xff0c;同时还可能会对继承来的某些行为进行一定的改变&#xff0c;这都是多态的表现…...

数据采集工具之Canal

本文主要介绍canal采集mysql数据的tcp、datahub(kafka)模式如何实现 1、下载canal https://aliyun-datahub.oss-cn-hangzhou.aliyuncs.com/tools/canal.deployer-1.1.5-SNAPSHOT.tar.gz canal的原理类似于mysql的主从复制&#xff0c;canal模拟的是从节点拉取主节点的binlog数…...

【后端】消息中间件小册

1.RabbitMQ RabbitMQ 是一个流行的消息中间件系统&#xff0c;采用 AMQP&#xff08;高级消息队列协议&#xff09;来管理消息的传递。它的工作原理涉及多个组件和机制来确保消息的可靠性和完整性。以下是 RabbitMQ 的基本工作原理以及如何保证消息不丢失的机制&#xff1a; R…...

【进阶篇-Day14:JAVA中IO流之转换流、序列化流、打印流、Properties集合的介绍】

目录 1、转换流1.1 转换流分类&#xff1a;1.2 转换流的作用&#xff08;1&#xff09;按照指定的字符编码读写操作&#xff1a;&#xff08;2&#xff09;将字节流转换为字符流进行操作&#xff1a; 2、序列化流2.1 序列化的基本使用&#xff1a;2.2 序列化的操作流程&#xf…...

【Material-UI】Checkbox 组件中的 Label Placement 设置详解

文章目录 一、Checkbox 组件简介1. 组件概述2. labelPlacement 属性 二、labelPlacement 属性的使用方法三、各标签位置的效果与应用场景1. Top&#xff08;顶部&#xff09;2. Start&#xff08;左侧&#xff09;3. Bottom&#xff08;底部&#xff09;4. End&#xff08;右侧…...

XJTUSE-离散数学-集合

基本概念 集合的包含与相等&#xff0c;如子集幂集&#xff1a;以A的所有子集组成的集合称为A的幂集AB <> 集合的基本运算 基本运算证明会考 交运算并运算补运算差运算&#xff1a;A \ B 环和运算&#xff1a;环积运算&#xff1a; 集合的其他表示方法 文图表示法 …...

安徽省消防设施操作员题库

1.()是做人的基本准则&#xff0c;也是社会道德和职业道德的一项基本规范。 A.诚实守信(正确答案) B.爱岗敬业 C.以人为本 D.钻研业务 2.()是指为了追求完美&#xff0c;坚持工匠精神&#xff0c;在工作中不放松对自己的要求。 A.爱岗敬业 B.精益求精(正确答案) C.勤奋刻苦 D.专…...

Singularity容器安装与使用

Singularity容器技术 docker的缺点: 资源限制问题:Slurm利用cgroups实现资源分配&#xff0c;Docker通过ocker daemon无法实现。 权限问题:Docker daemon使用 root用户启动&#xff0c;HPC场录期望使用普通用户运行容器。 singuiarily主要是适合HPC中的普通用户&#xff0c;…...

Linux 文件、重定向、缓冲区

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a; Linux 目录 一、文件 1、文件的理解&#xff08;浅层&#xff09; 1.文件是什么&#xff1f; 2.文件操作的前提 3.文件的存储 4.一个进程可以打开多个文件吗&#xff1f;如果可以怎么管理的&#xf…...

WEB漏洞-SQL注入之MYSQL注入

跨库注入的原理&#xff1a;针对同一IP下的不同域名 同一服务器下 网站A对应数据库A 网站B对应数据库B 网站C对应数据库C 如果某网站的存在注入点&#xff0c;注入点的权限恰好是root权限&#xff0c;也就是最高权限&#xff0c;那么可以通过跨库注入获取其他网站的数据库…...

mysql 查询 from a, b 和 a left join b 有什么区别

在MySQL中&#xff0c;from a, b 和 a left join b 有显著的区别&#xff0c;主要体现在查询结果和使用场景上。 基本语法与返回结果&#xff1a; from a, b&#xff1a;这种写法实际上是将两个表作为一个整体来处理&#xff0c;即假设这两个表是同一个表。因此&#xff0c;它…...

禁用ssh 22端口

在Linux系统中&#xff0c;要关闭SSH端口&#xff0c;可以通过修改SSH配置文件或防火墙规则来实现。 方法一&#xff1a;修改SSH配置文件 1. 使用root用户登录Linux系统。 2. 打开SSH配置文件&#xff0c;可以使用任何文本编辑器&#xff0c;如vi或nano。在大多数Linux发行版上…...

C++基础编程的学习3

nullptr关键字 在C11之前&#xff0c;空指针通常用NULL或0表示。然而&#xff0c;这些表示方法存在类型安全问题。C11引入了nullptr关键字&#xff0c;它提供了一个明确的、类型安全的空指针值。 Lambda表达式 Lambda表达式是C11引入的一种便捷的匿名函数定义方式。当Lambda…...

Java中的Optional类:解锁优雅编程的秘密

引言 在Java开发的世界里&#xff0c;空指针异常&#xff08;NullPointerException&#xff09;一直是让无数程序员头疼的问题之一。它不仅打断了程序的正常执行流程&#xff0c;还可能隐藏在复杂的业务逻辑之中&#xff0c;难以定位。自Java 8起&#xff0c;一个新的类——Op…...

聆思CSK6大模型开发板语音控制风扇(上)

前言 本文介绍如何实现大模型语音交互对风扇实现开关控制&#xff0c;示例使用的硬件是聆思CSK6大模型开发板&#xff0c;大模型接的是星火大模型。本文将先详细介绍大模型云端从获取交互语音到下发控制指令的全过程&#xff0c;包括整合上下文、配置提示词、语义意图分类、提取…...

代码随想录算法训练营第四十一天 | 121. 买卖股票的最佳时机、122. 买卖股票的最佳时机II、123. 买卖股票的最佳时机III

一、121. 买卖股票的最佳时机 题目链接&#xff1a;121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 (programmercarl.com)——121. 买卖股票的最佳时机 视频讲解&#xff1a;动态规划之 LeetCode&#xff1a;121.买卖股票的最…...

延时队列与redis and rabbitmq

延时队列是什么 延时队列&#xff08;Delay Queue&#xff09;是一种特殊的消息队列&#xff0c;它允许你在添加消息时设置一个延时时间&#xff0c;消息只有在延时时间到达后才能被消费。这种机制在分布式系统中非常有用&#xff0c;常用于处理需要在指定时间后执行的任务&am…...

数据结构--单链

#include "link.h" plink get_head() { plink pmalloc(sizeof(Link)); if(pNULL) { printf("申情节点失败\n"); return NULL; } p->len0; p->nextNULL; return p; } void head_insert(plink L,int a) {…...

DirectX Repair:一款历经十年打磨的免费系统修复利器

在日常使用计算机的过程中&#xff0c;我们难免会遇到各种系统报错问题。 其中最为常见的一种情况&#xff0c;就是在运行某些软件或游戏时&#xff0c;系统突然弹出提示框&#xff0c;告知用户某个特定的DLL文件缺失。 对于大多数普通用户而言&#xff0c;这样的报错信息往往令…...

WordPress内容组织终极指南:Argon主题标签与分类管理新策略

WordPress内容组织终极指南&#xff1a;Argon主题标签与分类管理新策略 【免费下载链接】argon-theme &#x1f4d6; Argon - 一个轻盈、简洁的 WordPress 主题 项目地址: https://gitcode.com/gh_mirrors/ar/argon-theme Argon主题是一款轻盈、简洁的WordPress主题&…...

AI驱动开发:在快马平台上让AI模型协作构建你的智能体框架

今天想和大家分享一个最近在InsCode(快马)平台上实践的AI辅助开发项目——构建一个用于代码审查的智能体框架。这个框架特别适合在快马这样的AI开发平台上实现&#xff0c;因为可以直接调用平台内置的多种AI模型来完成智能体之间的协作。 框架设计思路 整个智能体框架由三个核…...

如何快速入门WebGL:10个实用技巧带你玩转3D图形

如何快速入门WebGL&#xff1a;10个实用技巧带你玩转3D图形 【免费下载链接】WebGL The Official Khronos WebGL Repository 项目地址: https://gitcode.com/gh_mirrors/we/WebGL WebGL&#xff08;Web Graphics Library&#xff09;是用于在网页浏览器中渲染交互式2D和…...

如何提升桌面互动体验?BongoCat的个性化配置方案

如何提升桌面互动体验&#xff1f;BongoCat的个性化配置方案 【免费下载链接】BongoCat &#x1f431; 跨平台互动桌宠 BongoCat&#xff0c;为桌面增添乐趣&#xff01; 项目地址: https://gitcode.com/gh_mirrors/bong/BongoCat 在数字化工作与娱乐日益融合的今天&…...

用干词背单词,30天轻松背完小学词库1200单词!

用这个方法&#xff0c;30天轻松背完小学词库1200单词&#xff01;用干词背单词&#xff0c;30天能轻松背完小学词库1200单词&#xff01;而且会很轻松&#xff01;用干词App背完小学1200词&#xff0c;30天绰绰有余&#xff0c;甚至还能记得牢、忘得慢。小学英语单词量一般在8…...

Shell运算详解:expr、$(())、awk与浮点数运算【20260404】

文章目录 Shell运算详解:expr、$(())、awk与浮点数运算 1. Shell整数运算基础 1.1 expr 命令 1.2 $(( )) 算术扩展 2. awk 数值运算 2.1 awk 基础运算 2.2 awk 处理数据文件 3. 浮点数运算解决方案 3.1 使用bc进行浮点运算 3.2 使用awk进行浮点运算 4. 系统管理实战案例 4.1 案…...

智能自动化OpenCore配置工具:OpCore-Simplify让黑苹果新手也能15分钟完成专业级EFI构建

智能自动化OpenCore配置工具&#xff1a;OpCore-Simplify让黑苹果新手也能15分钟完成专业级EFI构建 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 当…...

2026年海南公司注册与合规服务行业评估报告

行业背景与评估维度2026年&#xff0c;随着海南自贸港全岛封关运作的正式实施&#xff0c;“零关税、低税率、简税制”的政策红利全面释放&#xff0c;海南已成为企业布局跨境业务与享受税收优惠的战略高地。然而&#xff0c;政策环境的快速迭代也带来了显著的痛点&#xff1a;…...

WSL网络桥接实战:从Kali到Ubuntu的跨系统网络配置

1. 为什么需要WSL网络桥接&#xff1f; 很多开发者同时使用Windows和Linux系统工作&#xff0c;WSL&#xff08;Windows Subsystem for Linux&#xff09;的出现让这两个系统能够更好地协同。但默认情况下&#xff0c;WSL使用的是NAT网络模式&#xff0c;这就导致了一些不便&am…...