地理数据可视化:使用echarts实现地图可视化功能

前言

地图是一种直观而强大的数据可视化工具,能够帮助我们更好地理解地理分布和区域间的差异。在本文中,我们将探讨如何使用 echarts 实现地图功能,展示各个区域的数据分布和趋势。


一、基础使用

<template><div class="chartBox"><div id="mapChart" :style="{ width: '100%', height: '100%' }"></div></div>
</template>
<script>
import JSON from "./map.json";
import * as echarts from "echarts";
export default {mounted() {this.initEchart();},methods: {initEchart() {echarts.registerMap("南阳市", JSON);var myChart = echarts.init(document.getElementById("mapChart"));let option = {title: {text: "各区县新车数量分布", //标题的文本内容x: "left", //标题的水平对齐方式},tooltip: {trigger: "item", //提示框的触发方式// 提示框的格式化函数,用于自定义提示框的内容formatter: function (data) {if (data.data && data.data.name) {return ("分布数量" +"<br/>" +data.data.name +":" +data.data.value +"辆");} else {return "";}},},//工具箱toolbox: {show: true, //是否显示工具箱orient: "vertical", //工具箱的布局方向,可以设置为"horizontal"表示水平布局,或"vertical"表示垂直布局left: "right", //工具箱的水平位置,可以设置为具体的像素值或百分比,或使用预定义的值如"left"、"center"、"right"等top: "center", //工具箱的垂直位置,可以设置为具体的像素值或百分比,或使用预定义的值如"top"、"middle"、"bottom"等//工具箱中的功能按钮,可以通过设置不同的属性来定义不同的功能按钮feature: {//下载dataView: { readOnly: false },restore: {}, //重置按钮saveAsImage: {}, //保存为图片按钮},},// 视觉映射visualMap: {min: 10, //数据的最小值,用于确定颜色映射的最小值max: 500, //数据的最大值,用于确定颜色映射的最大值text: ["辆", "数量"], //颜色映射的文本标签,数组的第一个元素表示最小值的文本,第二个元素表示最大值的文本realtime: false, //是否实时刷新视觉映射的颜色,设置为false时,只在初始化时计算颜色映射calculable: true, //是否显示拖拽用于调整颜色映射范围的手柄//颜色映射的范围,可以设置为一个颜色数组,表示最小值到最大值之间的颜色渐变inRange: {color: ["lightskyblue", "yellow", "orangered"],},},series: [{map: "南阳市", //地图的名称,可以是预定义的地图名称,也可以是自定义的地图名称zoom: 1, //当前视角的缩放比例roam: true, //是否开启平游或缩放scaleLimit: {//滚轮缩放的极限控制min: 1,max: 4,},name: "", //系列名称type: "map", //系列类型,用于指定图表的类型mapType: "南阳市", // 自定义扩展图表类型label: {//标签设置show: true,color: "black",},layoutCenter: ["50%", "50%"], //图表布局的中心位置layoutSize: "100%", //图表布局的大小data: [{ name: "卧龙区", value: 150 },{ name: "内乡县", value: 480 },{ name: "方城县", value: 500 },{ name: "宛城区", value: 80 },{ name: "社旗县", value: 320 },{ name: "唐河县", value: 252 },{ name: "邓州市", value: 108 },{ name: "西峡县", value: 481 },{ name: "新野县", value: 200 },{ name: "南召县", value: 211 },{ name: "淅川县", value: 98 },{ name: "桐柏县", value: 170 },{ name: "镇平县", value: 360 },],// 名称映射,用于自定义地图区域的名称nameMap: {},},],};myChart.setOption(option);window.addEventListener("resize", function () {myChart.resize();});},},
};
</script>
<style scoped>
.chartBox {width: 50%;height: 50vh;
}
</style>

在这里插入图片描述


二、实现思路

以上代码就是使用 echarts 库在 vue 中实现地图可视化的示例。具体实现思路如下:

  • vue 组件的模板中,使用 <div> 元素包裹地图容器,并设置容器的样式为 100% 宽度和高度;
  • vue 组件的 mounted 生命周期钩子函数中,调用 initEchart 方法初始化地图;
  • initEchart 方法中,首先使用 echarts.registerMap 方法注册地图数据,第一个参数为地图名称,第二个参数为地图的 JSON 数据;
  • 然后通过 echarts.init 方法初始化地图实例,传入地图容器的 DOM 元素;
  • 定义地图的配置项 option,包括标题、提示框、工具箱、视觉映射和系列等;
  • 在配置项中,设置地图的名称、缩放比例、是否开启平游或缩放等属性;
  • 最后,调用 myChart.setOption(option) 方法将配置项应用到地图实例上,并通过 window.addEventListener 方法监听窗口大小变化事件,实现地图的自适应。

其中地图的 JSON 数据可以从 阿里云数据可视化平台 中获取。


三、进阶用法

3.1 视觉映射 visualMap

pieces 属性中,每个对象表示一个区间段,包含以下属性:

  • gte: 大于等于指定值的数据将应用该区间段的样式;
  • lt: 小于指定值的数据将应用该区间段的样式;
  • label: 区间段的标签,用于显示在视觉映射组件上;
  • color: 区间段的颜色,用于表示该区间段的数据。
visualMap: {show: true,left: 20,bottom: 40,showLabel: true,pieces: [{gte: 100,//label: "高风险区(>=500)",color: "#6f83db",},{gte: 50,lt: 100,label: "中风险区(200-400)",color: "#9face7",},{gte: 0,lt: 50,label: "低风险区(0-200)",color: "#bcc5ee",},],
},

在这里插入图片描述


3.2 地理坐标系 geo

geo: {map: "南阳市",scaleLimit: {min: 1,max: 4,},zoom: 1,label: {show: true,color: "black",},itemStyle: {normal: {shadowBlur: 20,shadowColor: "rgba(0, 0, 0, 0.3)",borderColor: "rgba(0, 0, 0, 0.2)",},emphasis: {areaColor: "#f2d5ad",shadowOffsetX: 0,shadowOffsetY: 0,borderWidth: 0,},},
},
series: [{type: "map",geoIndex: 0,//指定使用哪个地理坐标系组件,例如0表示使用第一个地理坐标系组件data: [],},
],

在这里插入图片描述


3.3 自定义地图区域的名称映射 nameMap

nameMap 是一个用于地图区域名称映射的属性。在使用地图时,有时地图数据源中的地区名称与我们想要显示的名称不一致,或者需要进行简化。这时,可以使用 nameMap 属性来进行映射。nameMap 是一个对象,其中键是地图数据源中的地区名称,值是我们想要显示的地区名称。通过在 nameMap 中定义映射关系,可以将地图数据源中的地区名称转换为我们想要的名称。例如,假设地图数据源中的地区名称是英文的,但我们想要在地图上显示中文的地区名称。我们可以使用 nameMap 来进行映射,将英文地区名称映射为中文地区名称。

nameMap: {内乡县: "内乡",
},

在这里插入图片描述


3.4 地图上展示文字 + 数值

要在地图上直接展示区县名称和数值,你可以在 series 中的 label 属性中设置 formatter 函数来实现。例如,在下面代码中,我在 serieslabel 属性中添加了一个 formatter 函数,用于自定义标签的显示内容。

label: {show: true,color: "white",formatter: function (params) {return params.name + "(" + params.value + ")";},
},

在这里插入图片描述


相关推荐

⭐ 玩转数据可视化,从入门到精通 Echarts

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JAVA】Collections.sort()方法详解

一、简介 Collections.sort() 是 Java 集合框架&#xff08;Java Collections Framework&#xff09;中的一个静态方法&#xff0c;用于对列表&#xff08;List&#xff09;中的元素进行排序。此方法利用了 Java 的泛型机制&#xff0c;可以很方便地对各种类型的列表进行排序。…

USB协议学习(三)大容量存储设备SCSI协议分析

笔者来简单介绍一下SCSI得协议命令 1、SCSI协议认识 SCSI&#xff1a;Small Computer System Interface&#xff0c;用于计算机外部设备得接口标准&#xff0c;定义了与外部设备得一套协议。SCSI标准协议族支持很多钟SCSI设备&#xff0c;像盘&#xff0c;打印机&#xff0c;扫…

2024年斋月已开始,分享邮件祝福模板

今天斋月正式开始了&#xff0c;这个是穆斯林国家最重要的节日了。斋月期间穆斯林国家的政府以及企业都会调整生活以及工作时间和节奏&#xff0c;不管是海关、港口、企业还是政府机构都会受到影响&#xff0c;有的甚至彻底停止&#xff0c;所以大家跟穆斯林客户做生意的话&…

【JavaScript标准内置对象】Math的介绍。

简言 js与其他高级语言一样&#xff0c;也可以进行数学运算。 Math 是一个内置对象&#xff0c;它拥有一些数学常数属性和数学函数方法。Math 不是一个函数对象。 Math 用于 Number 类型。它不支持 BigInt。 Math 与其他全局对象不同的是&#xff0c;Math 不是一个构造器。Ma…

9个免费游戏后端平台

在这篇文章中&#xff0c;您将看到 九个免费的游戏服务平台提供商&#xff0c;这可以帮助您开始在线多人游戏&#xff0c;而无需预先投入大量资金。 每个提供商都有非常独特的功能&#xff0c;因此成本应该只是决定时要考虑的方面之一。 我还从低预算项目的角度对免费提供商进…

GPU:使用阿里云服务器,免费部署一个开源大模型

前面提到CPU版本如何安装和部署ChatGLM&#xff0c;虽然能部署&#xff0c;但是速度和GPU比起来确实一言难尽。 然后找阿里云白嫖了一个服务器&#xff08;省点用的话&#xff0c;不用的时候关机&#xff0c;可以免费用两个多月没问题&#xff09;&#xff0c;只要没有申请过 …

四管齐下 共建发展 | 七巧低代码助力零售行业打造一体化协同解决方案

行业背景 随着互联网和移动技术的普及&#xff0c;零售行业的销售渠道日趋多元化和融合化&#xff0c;传统线下渠道和新兴线上渠道相互竞争和协作&#xff0c;形成了新零售和全渠道的格局。快消品新零售模式下&#xff0c;企业需要通过数字化和智能化的手段&#xff0c;实现对…

应用资料 | 电动工具直流调速专用集成电路GS069

01 产品简介 GS069是CMOS工艺、电动工具直流调速专用集成电路。具有电源电压范围宽、功耗小、抗干扰能力强等特点。 应用范围&#xff1a;广泛应用于各种电动工具。 02 产品基本参数 03 产品应用 1、应用图&#xff1a; 2、测试参数&#xff1a;&#xff08;VCC9V&…

使用gin框架,编写一个接收数据的api接口

功能&#xff1a;这里主要编写一个接口&#xff0c;将其json 数据存入对应的redis队列中&#xff0c;并统计每天的每小时请求数量 环境&#xff1a; go version go1.22.0 linux/amd64 平台 linux X64 步骤一 新建目录 命令如下&#xff1a; mkdir FormData 步骤二 新增…

Websocket在Asp.net webApi(.net framework)上的应用

之前在写看板部分的web api的时候&#xff0c;都是通过Ajax在规定时间内轮询调用web api&#xff0c;这样简单省事&#xff0c;但是当看板多了&#xff08;并发量上来&#xff09;以后&#xff0c;比较消耗服务器的性能&#xff0c;所以最近研究了websocket&#xff0c;希望使用…

【数据结构】哈希

在一个数据序列中查找某一个数据元素&#xff0c;是数据管理时经常涉及的&#xff0c;通常以比较的方式来完成&#xff0c;典型的案例有无序序列的暴力查找&#xff08;O(N)&#xff09;、有序序列的二分查找&#xff08;O(logN)&#xff09;、平衡搜索树&#xff08;O(logN)&a…

IOT的发展历程及其优势——青创智通

工业互联网-物联网-设备改造-IOT-青创智通 ​随着科技的不断发展&#xff0c;物联网&#xff08;IoT&#xff09;已经逐渐成为了我们生活中不可或缺的一部分。IoT是指通过互联网将各种物理设备连接起来&#xff0c;实现设备之间的数据交换和智能化控制。IoT的发展不仅改变了我们…