地理数据可视化:使用ECharts实现地图可视化功能
创作时间:
作者:
@小白创作中心
地理数据可视化:使用ECharts实现地图可视化功能
引用
CSDN
1.
https://blog.csdn.net/Shids_/article/details/135545017
地图可视化是数据可视化的重要组成部分,能够直观地展示地理分布和区域差异。ECharts作为一款优秀的数据可视化库,提供了丰富的地图可视化功能。本文将详细介绍如何使用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函数来实现。例如,在下面代码中,我在series的label属性中添加了一个formatter函数,用于自定义标签的显示内容。
label: {
show: true,
color: "white",
formatter: function (params) {
return params.name + "(" + params.value + ")";
},
}
热门推荐
春节消费成绩单:国内出游总花费6770亿元,同比增长7%
新型冠状病毒肺炎感染的预防措施
闽政通APP上线新功能:无犯罪记录证明一键搞定!
闽政通APP荣获全国政务服务“A”级评价,创新服务模式获认可
乾隆粉彩满花瓷方瓶亮相镇江博物馆 展现清代瓷器工艺巅峰
镇江博物馆镇馆之宝:青铜凤纹尊
镇江博物馆:国宝级文物展示地
镇江博物馆:云台山麓上的东印度式建筑瑰宝
镇江博物馆AR导览新体验:让文物“活”起来
广清永高铁有新进展
好消息:广东这条北上高铁进行实地勘察!线路全长402公里
总投资超535亿元,广清永高铁将连接粤港澳大湾区与中部地区
寂寞掩柴扉,苍茫对落晖——王维的《山居即事》赏析
王维《山居即事》阅读答案及全诗翻译赏析
诗词间的理趣探寻:《古诗词中的逻辑(修订版)》漫谈
春节要注意“三亲不走,两礼不回”,啥意思,是哪“三亲两礼”?
华清宫:一座见证繁华与变迁的千年古宫
流感为什么会变成重症肺炎?专家揭秘你必须知道的事!
光绪为何不杀掉慈禧,自己掌权?溥仪:这3个后果他承担不了
美国黄石公园旅游攻略及注意事项
从小镇男孩到全球首富:伯纳德·阿诺特的奢侈品帝国传奇
马斯克登顶全球首富:财富超4000亿!
秋冬吃虾攻略:5招挑出最新鲜的虾!
虾的营养大揭秘:健康吃法全攻略
春节聚餐必备:水煮虾完美烹饪技巧
龙井虾仁:最优雅的虾料理
学习历史对孩子成长的帮助有多大?家长要早知道
彩虹糖实验爆红网络:背后科学揭秘!
四价流感疫苗:今冬最强防护!
这种癌症一发现就是中晚期,医生:这几类人要特别注意