Vue中使用echarts@4.x中国地图及AMap相关API的使用

news2024/9/21 22:43:29

一、此 demo 实现的基本功能

1.中国地图的显示
2.地图点击下钻的功能
3.地图相关组件的使用,例 tooltip…

二、实现思路
初始使用下载本地的中国 geo 格式的 json 数据来绘制地图,点击某一区划(例:山东省)时,以点击的区划名称使用 AMap.DistrictSearch(opts) 构造函数查询下一级的区划信息(例:青岛市区划 id 为 370200)和业务数据整合处理;然后以点击的区划 id 用AMapUI中的组件DistrictExplorer相关方法获取下一级的地图 json 数据,继而绘制下一级地图(例:青岛市),再点下同…
三、引入 echarts
因为 echarts 在 5.0 及之后版本因 包体积优化和法规规定 取消了内置 json 地图数据,但仍然可以下载之前版本的依赖包来使用或下载曾经内置的地图数据。
若要引地图 json 数据,建议下载 echarts@4.9.0 ,这是 echarts 取消内置前的最新版本地图 json 数据,之前的版本地图数据比如 3.x,2.x 或多或少在地图边界和岛屿精度部分有所不准,亲测~
1. 通过 npm 方式下载 echarts


$ npm i echarts@4.9.0

2. 引入 echarts


import echarts from 'echarts'

3. 相关 api 说明

  1. echarts.registerMap
    echarts 方法:在 echarts 5.0 及之后版本取消了registerMap 此方法,所以最新 echarts(v5.2.2)版本引用会报错,所以这里我使用 v4.9.0 来注册地图。
// registerMap 接收两个参数
// 第一个是地图名称,china 为显示右下角南海诸岛,china1 则不显示右下角南海诸岛
// 第二个参数是绘制地图所需的json数据,在这里我下载了两个版本的json数据放在本地引用来使用,见下文

echarts.registerMap('china', chinaJson)
  1. echarts.init
    echarts 方法:创建一个 ECharts 实例,返回 echartsInstance,不能在单个容器上初始化多个 ECharts 实例。

// 创建实例,接收三个参数
// 参数dom:实例容器,一般是一个具有高宽的div元素
// 参数theme:可选,应用的主题。可以是一个主题的配置对象
// 参数opts:可选,附加参数

this.myChart = echarts.init(dom, theme, opts)
  1. echartsInstance.on
    实例方法:绑定事件处理函数(对应 off:解绑事件处理函数)

// 创建实例,接收三个参数
// 参数eventName:事件名称,全小写,例如'click','mousemove', 'legendselected'
// 参数query:可选,过滤条件,能够只在指定的组件或者元素上进行响应。可为 string 或者 Object
// 参数handler:事件处理函数

this.myChart.on(eventName, query, handler)
  1. echartsInstance.setOption
    实例方法:设置图表实例的配置项以及数据,万能接口,所有参数和数据的修改都可以通过 setOption 完成,ECharts 会合并新的参数和数据,然后刷新图表。

配置项部分用法见下文五、echarts 部分配置项。官方配置项手册


// 参数 option:配置项

this.myChart.setOption(option)

四、AMap 相关 api 使用说明
1. 引入 AMap


<!-- html文件 -->

<!--引入高德地图JSAPI,key值是在AMap官方申请的哦,plugin是项目中用到的插件 -->
<script src="//webapi.amap.com/maps?v=2.0&key=bb36205e1ab4869979c6505a3cc362ee&plugin=AMap.DistrictSearch"></script>

<!--引入UI组件库(1.1版本) -->
<script src="//webapi.amap.com/ui/1.1/main.js"></script>

2. AMap.DistrictSearch(opt)
插件,行政区查询服务,提供行政区相关信息。官方文档


/** 
参数opts:对象,实例时的配置
opts:{
  level: String, 关键字对应的行政区级别或商圈,可选值
  showbiz: Boolean, 是否显示商圈,默认值true
  extensions: String,是否返回行政区边界坐标点。默认值:base,不返回行政区边界坐标点,取值:all,返回完整行政区边界坐标点
  subdistrict:Number,默认1,显示下级行政区级数(行政区级别包括:国家、省/直辖市、市、区/县4个级别),商圈为区/县下一级。0不返回下一级区划,1返回下一级区划,2...,3...。
}
**/

const districtSearch = new AMap.DistrictSearch(opts)
// 根据关键字查询行政区或商圈信息 关键字支持:行政区名、citycode、adcode、商圈名,默认值:“全国”
districtSearch.search(obj.data.name, (status, result) => {
  console.log('加载区划信息', status, result)
})

3. DistrictExplorer
加载绘制地图所需的 geo 格式的 json 数据。(行政区划浏览) 提供了全国范围内到区县一级的行政区划数据(含边界),同时提供一些辅助功能,比如区划面绘制、事件监听,以及快速判断经纬度所属的子级区划等。官方文档


// 使用

AMapUI.loadUI(['geo/DistrictExplorer'], (DistrictExplorer) => {
  let districtExplorer = new DistrictExplorer({
    eventSupport: true, // 打开事件支持
    map: null, // 地图对象实例。仅仅获取数据,不涉及地图相关的操作时,可以不设置
  })
  districtExplorer.loadAreaNode(obj.data.cityCode, (error, areaNode) => {
    if (error) return
    const mapJson = {}
    // 返回该区域中全部的子级区划Feature数组
    mapJson.features = areaNode.getSubFeatures() || []
    console.log('绘制地图所需的json数据', mapJson)
  })
})

五、echarts 部分配置项


const option = {
  visualMap: {
    // 视觉映射组件配置
    type: 'continuous', // 定义为连续型 visualMap
    show: true,
    bottom: '5%',
    left: '2%',
    text: ['高', '低'], // 两端的文本
    min: 0, // 指定 visualMapContinuous 组件的允许的最小值
    max: 100, // 指定 visualMapContinuous 组件的允许的最大值
    inRange: {
      // 定义 在选中范围中 的视觉元素
      color: ['#fff', '#A0CFFF', '#409EFF'], // 图元的颜色
    },
    calculable: true, // 是否显示拖拽用的手柄(手柄能拖拽调整选中范围)
  },
  tooltip: {
    // 提示框组件
    trigger: 'item',
    formatter: function (item) {
      if (item.name == '南海诸岛') {
        return ''
      } else {
        return item.name + '<br>业务数据:' + (item.value || 0) + ' 个'
      }
    },
  },
  series: [
    // 系列列表。每个系列通过 type 决定自己的图表类型
    {
      type: 'map', // 系列列表。每个系列通过 type 决定自己的图表类型
      map: 'china', // 地图。china 为中国全国地图+右下角南海诸岛,china1 为中国全国地图
      name: '业务数据', // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列
      aspectScale: 0.75, // 用于 scale 地图的长宽比
      zoom: 1.2, // 地图缩放多少倍
      roam: true, // 允许缩放和平移
      mapType: '自定义地图',
      selectedMode: 'single', // 点击区域,会处于选中状态,single单选
      showLegendSymbol: false, // 在图例相应区域显示图例的颜色标识(系列标识的小圆点),存在 legend 组件时生效
      // center: [100.97, 35.71], // 初始化时的地图位置,可通过改变地图中心视角的经纬度来实现地图的平移
      itemStyle: {
        // 地图区域的多边形图形样式
        normal: {
          // 正常时的样式
          color: '#ccc', // 图形的颜色
          borderColor: '#303133', // 图形的描边颜色
          areaColor: '#d4f7fc', // 地图区域颜色
          borderWidth: 0.5, // 描边线宽。为 0 时无描边
          label: {
            // 设置地图区域名的文本样式,例如地名的字体大小等
            show: true, // 显示地区的文本名称,默认是不显示的,默认状态是hoverORclick才显示
            fontSize: 12,
            textStyle: {
              color: '#606266',
            },
          },
        },
        emphasis: {
          // 选中后的样式
          areaColor: '#4382F6',
          borderColor: '#fff',
          areaStyle: {
            color: '#fff',
          },
          label: {
            show: true,
            fontSize: 12,
            textStyle: {
              color: '#003767',
            },
          },
        },
      },
      data: this.mapData, // 地图系列中的数据内容数组。数组项可以为单个数值
    },
  ],
}

六、地图 json 数据说明及 demo 效果图

  1. 地图 json 数据说明比较#
    echarts@5.0 版本之前内置的 geo 地图 json 数据(这里特指v4.9.0)是不显示海南省下方的南海诸岛海域,所以地图较方正。

阿里datav的地图 json 数据是显示海南省下方的南海诸岛海域,所以地图偏高。

  1. demo 效果图#
    1.使用echarts@4.9.0内置的地图 json 数据绘制
    在这里插入图片描述
    2.使用阿里datav下载的地图 json 数据绘制
    在这里插入图片描述
    到这里,就全部介绍完毕了,希望对你有用的话,可以帮俺点点赞点点关注谢谢哈!

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

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

相关文章

[渗透测试学习] Keeper - HackTheBox

信息搜集 nmap扫描一下端口 nmap -sV -sC -p- -v --min-rate 1000 10.10.11.227发现有两个端口&#xff0c;22端口为ssh服务&#xff0c;80端口是http服务 尝试访问一下80端口 提示我们要访问tickets.keeper.htb/rt/&#xff0c;访问发现不行 那么把该域名添加到hosts里面 …

算法:程序员的数学读书笔记

目录 ​0的故事 ​一、按位计数法 二、不使用按位计数法的罗马数字 三、十进制转二进制​​​​​​​ ​四、0所起到的作用​​​​​​​ 逻辑 一、为何逻辑如此重要 二、兼顾完整性和排他性 三、逻辑 四、德摩根定律 五、真值表 六、文氏图 七、卡诺图 八、逻…

都有哪些大厂开始适配鸿蒙原生应用呢

12月8日&#xff0c;随着支付宝宣布启动鸿蒙原生应用开发以来&#xff0c;国内宣布接入鸿蒙原生应用开发的公司越来越多。事实上&#xff0c;自9月华为宣布鸿蒙原生应用全面启动以来&#xff0c;已有金融、旅行、社交等多个领域的企业和开发者陆续宣布加入鸿蒙生态&#xff0c;…

SpeechGPT领航:创新的130亿参数跨模态AI模型

引言 在人工智能的最新进展中&#xff0c;SpeechGPT以其130亿参数的规模和跨模态会话能力引起了业界的广泛关注。这一由复旦大学邱锡鹏教授团队开发的模型&#xff0c;不仅在技术层面上取得了重大突破&#xff0c;也为多模态人工智能&#xff08;AI&#xff09;的未来发展指明…

Unity 使用AddTorque方法给刚体施加力矩详解

给刚体施加力&#xff0c;除了使用AddForce方法&#xff0c;我们还可以使用AddTorque方法。该方法是通过施加力矩给刚体以力。AddTorque方法从形式上跟AddForce差不多&#xff0c;它也有4个重载方法&#xff1a; 1、AddTorque(Vector3 torque)&#xff1b;使用Vector3类型参数…

Github详细使用教程

1. 什么是 Github? github是一个基于git的代码托管平台&#xff0c;付费用户可以建私人仓库&#xff0c;我们一般的免费用户只能使用公共仓库&#xff0c;也就是代码要公开。 Github 由Chris Wanstrath, PJ Hyett 与Tom Preston-Werner三位开发者在2008年4月创办。迄今拥有5…

SpringBoot之响应的详细解析

2. 响应 前面我们学习过HTTL协议的交互方式&#xff1a;请求响应模式&#xff08;有请求就有响应&#xff09; 那么Controller程序呢&#xff0c;除了接收请求外&#xff0c;还可以进行响应。 2.1 ResponseBody 在我们前面所编写的controller方法中&#xff0c;都已经设置了…

【JavaWeb】往浏览器打印一个hello world

上集:建一个web项目 第一步&#xff1a;建好Servlet类的文件 右键src&#xff0c;建一个class 就行 第二步&#xff1a;编代码 可以直接复制粘贴 用来测试的类 import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; //↓是注解&#xff0…

QML 自定义进度条组件开发

一、效果预览 二、介绍&#xff1a; 自定义的QML 屏幕亮度拖动进度条组件CusProgressBar 可跟鼠标移动 更改进度条样式 三、代码 import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Controls.Material 2.12/***author:Zwj*csdn:来份煎蛋吧*date:2023/12/16*…

c++_01_名字空间_复合类型_缺省参数_哑元函数

0 前言 C和C一样&#xff0c;都属于编译型语言 C和C一样&#xff0c;都属于强类型语言 C对C完全兼容&#xff0c;并提供更多面向对象的特性&#xff1a;语言风格更加简洁&#xff0c;类型检查更加严格 1 名字空间 namespace WHY&#xff1f;划分更精细的逻辑单元(逻辑空间)&…

深度学习——第6章 浅层神经网络(NN)

第6章 浅层神经网络&#xff08;NN&#xff09; 目录 6.1 神经网络模型概述 6.2 神经网络正向传播 6.3 神经网络反向传播 6.4 W和b的初始化 6.5 总结 上一课主要介绍了一些神经网络必备的基础知识&#xff0c;包括Sigmoid激活函数、损失函数、梯度下降和计算图。这些知识对…

人工智能在红斑狼疮应用主要以下4个方面

人工智能&#xff08;Artificial Intelligence, AI&#xff09;在医学领域的应用已取得了一定的进展。红斑狼疮&#xff08;Systemic Lupus Erythematosus, SLE&#xff09;是一种免疫系统性疾病&#xff0c;对该疾病进行诊断和治疗是一个复杂的过程。人工智能可以发挥作用&…

VGG(pytorch)

VGG:达到了传统串型结构深度的极限 学习VGG原理要了解CNN感受野的基础知识 model.py import torch.nn as nn import torch# official pretrain weights model_urls {vgg11: https://download.pytorch.org/models/vgg11-bbd30ac9.pth,vgg13: https://download.pytorch.org/mo…

ArrayList与LinkLIst

ArrayList 在Java中&#xff0c;ArrayList是java.util包中的一个类&#xff0c;它实现了List接口&#xff0c;是一个动态数组&#xff0c;可以根据需要自动增长或缩小。下面是ArrayList的一些基本特性以及其底层原理的简要讲解&#xff1a; ArrayList基本特性&#xff1a; 动…

前端框架的虚拟DOM(Virtual DOM)

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

JVM学习之类加载子系统

类加载子系统 类加载子系统负责从文件或者网络中加载Class文件&#xff0c;class文件在开头有特定的标识 ClassLoader只负责class文件的加载&#xff0c;是否可运行是执行引擎决定的 加载的类信息放在方法区。除了类信息之外&#xff0c;方法区也会放运行时常量池&#xff0c…

漏刻有时数据可视化Echarts组件开发(43)纹理填充和HTMLImageElement知识说明

在 ECharts 中&#xff0c;纹理填充可以通过自定义系列&#xff08;series&#xff09;的 itemStyle 属性来实现。itemStyle 属性用于设置系列中每个数据项的样式&#xff0c;包括填充颜色、边框颜色、边框线宽等。 纹理填充 // 纹理填充 {image: imageDom, // 支持为 HTMLIm…

VM虚拟机打不开原来保存的虚拟机文件夹ubuntu

VMWare虚拟机打不开原来保存的虚拟机文件夹ubuntu 换了电脑把之前的虚拟机克隆的文件夹直接拿来用 报这个错&#xff1a; 指定的文件不是虚拟磁盘 打不开磁盘“D:\ubuntu_iso\ubuntu_location\Ubuntu 64 位-s002.vmdk”或它所依赖的某个快照磁盘。 模块“Disk”启动失败。 未…

HiveSql语法优化三 :join优化

前面提到过&#xff1a;Hive拥有多种join算法&#xff0c;包括Common Join&#xff0c;Map Join&#xff0c;Bucket Map Join&#xff0c;Sort Merge Buckt Map Join等&#xff1b;每种join算法都有对应的优化方案。 Map Join 在优化阶段&#xff0c;如果能将Common Join优化为…

PAT 乙级 1008 数组元素循环右移问题

解题思路:这种循环题有一个经典的O(N)解法&#xff0c;就是前后对称交换&#xff0c;举例&#xff0c;我要循环右移 123456 的后俩个&#xff0c;我们的算法是将56&#xff0c;变成65&#xff0c;把前面的1234变成4321,然后将432165 对称交换就变成了561234 c语言代码如下&…