地理数据可视化:使用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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

.net core框架

ASP.NET Core 入门 跨平台开源框架 B/S 类与方法 Console 部分称为“类”。 类“拥有”方法&#xff1b;或者可以说方法存在于类中。 WriteLine() 部分称为“方法”。 想要使用方法就要知道方法在哪里 —————————— 执行流 一次执行一段 ASP.NET Core 是什么东西…

多场成像,快速提高机器视觉检测能力--51camera

多阵列CMOS传感器与芯片级涂层二向色滤光片相结合&#xff0c;可在单次扫描中同时捕获明场、暗场和背光图像。 多场成像是一种新的成像技术&#xff0c;它可以在不同的光照条件下同时捕获多幅图像。再加上时间延迟积分(TDI)&#xff0c;这种新兴的成像技术可以克服许多限制的传…

编译Linux内核并修改版本号后缀为学号-Ubuntu22.04中编译安装Linux内核6.7.8

前言&#xff1a;实验课要求下载最新版本Linux内核并修改版本号&#xff0c;本人在Vmware中Ubuntu22.04中实现&#xff0c;花三天时间查阅大量网站资料。记录一下误打误撞成功的过程&#xff0c;希望对你们有帮助。 目录 一、常规安装步骤&猜想Ubuntu与gcc版本过低 二、安…

【c++】string类的使用及模拟实现

1.我们为什么要学习string类&#xff1f; 1.1 c语言中的字符串 我们先了解一下什么是OOP思想 OOP思想&#xff0c;即面向对象编程&#xff08;Object-Oriented Programming&#xff09;的核心思想&#xff0c;主要包括“抽象”、“封装”、“继承”和“多态”四个方面。 抽象…

2020-2021年江苏省社区行政村边界数据

开展村&#xff08;社区&#xff09;规模优化调整&#xff0c;一是落实中央和省委部署要求的需要。党的十九大作出了实施乡村振兴战略的重大部署。乡村要振兴&#xff0c;合理确定行政村规模是前提、也是基础。2017年以来&#xff0c;国务院和省委省政府相继出台文件&#xff0…

pc端vue2项目使用uniapp组件

项目示例下载 运行实例&#xff1a; 这是我在pc端做移动端底代码时的需求&#xff0c;只能在vue2使用&#xff0c;vue3暂时不知道怎么兼容。 安装依赖包时可能会报&#xff1a;npm install Failed to set up Chromium r756035! Set “PUPPETEER_SKIP_DOWNLOAD” env variable …

羊大师分析羊奶的喝法,都有什么讲究?

羊大师分析羊奶的喝法,都有什么讲究&#xff1f; 羊奶的喝法确实有一些讲究&#xff0c;以下是一些主要的注意事项&#xff1a; 温度控制&#xff1a;羊奶不宜煮沸喝&#xff0c;加热时最好保持在50℃&#xff0d;60℃之间&#xff0c;以避免破坏其营养成分。 饮用时间&…

CleanMyMac X4.15具有哪些功能和特点?

CleanMyMac X具有许多其他功能和特点&#xff0c;以下是一些主要亮点&#xff1a; 系统清理&#xff1a;它能够深入扫描macOS系统&#xff0c;识别并清除各种垃圾文件&#xff0c;如缓存、日志、无用的语言文件等。这不仅有助于释放硬盘空间&#xff0c;还可以提高系统的整体性…

SIGMATEK西格玛泰克CPU模块控制器维修CCP531 12-104-531

Sigmatek的“解决方案”有两方面含义&#xff1a;一方面是指Sigmatek从控制系统、人机界面、伺服驱动系统直到开发平台&#xff0c;都能够提供解决方案&#xff1b;另一方面是指从方案的一开始&#xff0c;Sigmatek便能够位客户提供独特的、量身定做的产品实施方案。 Sigmatek产…

【C++】关键字:auto

文章目录 1. 介绍2. 如何使用 1. 介绍 从C11开始&#xff0c;auto变成了类型指示符&#xff08;之前auto并不是这个作用&#xff09;。使用auto定义变量时必须对其进行初始化&#xff0c;在编译阶段编译器自动推导auto变量的实际类型。因此auto并非是一种“类型”的声明&#…

每日一题——LeetCode1668.最大重复字符串

方法一 includes()repeat()秒了 使用repeat()将word重复i次&#xff0c;看是否包含于sequence中&#xff0c;将最大的i赋值给k var maxRepeating function(sequence, word) {let k0for(let i1;i*word.length<sequence.length;i){if(sequence.includes(word.repeat(i))){k…

人工智能将如何改变我们的工作?

在2023年&#xff0c;生成式人工智能成为最热门的话题。以ChatGPT为例&#xff0c;该平台拥有超1.8亿的订阅用户和近亿的周活跃用户。无论是媒体还是公众&#xff0c;都在广泛讨论生成式人工智能。尽管我对此感到好奇&#xff0c;但我不确定应该提出哪些问题&#xff0c;也不清…

题目:珠宝的最大交替和(蓝桥OJ 3791)

问题描述&#xff1a; 解题思路&#xff1a;&#xff08;思路样例从0开始赋值&#xff09; 注意点&#xff1a;1.S需要开long long 2.需要考虑如果交换的差值&#xff08;即Aj - Ai)为负数的情况。 题解&#xff1a;&#xff08;实例代码为从1开始赋值&#xff0c;因此奇偶要与…

工业数据采集网关的功能与应用-天拓四方

工业数据采集网关是一种专门用于采集、处理、传输工业现场数据的设备。它能够实时收集来自各种传感器、仪表和设备的数据&#xff0c;并通过网络将这些数据传输到云端或数据中心。同时&#xff0c;数据采集网关还具备数据清洗、转换和压缩等功能&#xff0c;确保数据的质量和传…

mybatis如何打印出完整sql语句

分两步: 1. 在application.properties配置中添加配置项: mybatis-plus.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl logging.level.mapper文件的包路径DEBUG (示例: logging.level.com.test.biztest.service.dalDEBUG, com.test.biztest.service.d…

九州金榜|孩子厌学怎么引导?

孩子在成长的过程中&#xff0c;尤其在上学的时候&#xff0c;孩子出现厌学情绪这是非常常见的事情&#xff0c;当孩子出现厌学情绪时&#xff0c;家长要采取什么样的方法才能帮助孩子找回学习兴趣和动力呢&#xff1f;九州金榜家庭教育给出建议&#xff0c;首先父母不应该过于…

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

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

FPGA-AXI4接口协议概述

假设我们要传一帧1080P的图片到显示屏显示&#xff0c;那么需要多大的储存空间呢&#xff1f; 一帧1080P的RGB565图像数据需要1920*1080*1633.1776Mb 存储空间 下图是ZYNQ-7000系列中Block RAM的大小&#xff1a; 可以看到最大存储空间的BRAM都不能存储一帧图片&#xff0c;那…

Turbo C++ v3.7.8.9的下载和安装(C语言编辑器完整安装步骤详细图文教程)·跟老吕学C语言(C语言必学教程之一)

[TOC](Turbo C v3.7.8.9的下载和安装(C语言编辑器完整安装步骤详细图文教程)) 跟老吕学C语言&#xff08;C语言必学教程之一&#xff09; 老吕是通过 Turbo C 编译器开始了 C 编程培训和开发。 本文中&#xff0c;老吕将带你了解如何下载 Turbo C&#xff0c;如何在任何最新 W…

十堰网站建设公司华想科技具有10年的网站制作经验

2018年已经结束了。 华翔科技收到了很多客户的咨询&#xff0c;他们都有一个共同的问题&#xff1a;建一个网站需要多少钱&#xff1f; 但是&#xff0c;我们都会问&#xff1a;您有什么具体需求吗&#xff1f; 大多数人的答案是否定的&#xff0c;他们只是想打听一下价格。 十…