使用Echarts.js绘制中国地图

使用Echarts.js绘制中国地图

一、页面效果

二、功能描述

​ 1、展示中国所有省份,包括南海诸岛,确保领土完整,中国领土神圣且不可侵犯

​ 2、每个省份根据对应数据的不同渲染不同的颜色,根据数据从小到大,对应底部视觉映射组件指定的颜色渐变区间内从浅到深。

​ 3、每个省份不可被选中,但鼠标hover会展示对应数据信息,且对应数据图形具有hover高亮样式。

​ 4、颜色渐变区间对应的数据区间,由数据列表的实际数据决定,最小值为0,最大值为数据列表的最大值。

*注意:

​ 1、当前案例是在Vue2 中使用,echarts.js版本为5.3.2

三、具体代码

html结构
html 复制代码
<!-- 准备渲染echarts的画布 -->  
<div class="china-map" id="map"></div>

<script>
// 引入echarts依赖
import * as echarts from "echarts";
// 导入中国地图JSON数据
import mapJson from "@/assets/json/china.json";
</script>

<style>
.china-map {
  height: 476px; /* 必须指定画布的高度 否则无法渲染 */
}
</style>
js渲染逻辑
js 复制代码
    // 渲染地图函数(最大值参数可不传递,默认为10000)
showMap(dataList, maxValue = 10000) {
      // 判断是否已经存在实例 避免重复注册
      let myChart = echarts.getInstanceByDom(document.getElementById("map"));
      if (!myChart) {
        myChart = echarts.init(document.getElementById("map"));
      }
  		// 注册地图
      echarts.registerMap("china", mapJson); 
      var option;
      option = {
        // 提示框组件
        tooltip: {
          trigger: "item", // 触发类型-数据项图形hover触发
          formatter: "{b}:{c}人", // hover提示框展示的内容
        },
        // 视觉映射组件
        visualMap: {
          orient: "horizontal", // 显示方式-水平
          left: "center", // 距离容器左侧的位置-居中
          min: 0, // 数据最小值
          max: maxValue, // 指定数据最大值
          itemHeight: 200, // 组件高度-200px(设置显示方式为水平之后,组件高度即为宽度)
          inRange: {
            color: ["#c2e9ff", "#2662a9"], // 范围颜色-从小到大渐变颜色区间
          },
          hoverLink: false, // 是否启用数据项图形hover时的联动高亮效果。
          // text: ["高", "低"], // 组件两侧的文本
        },
        series: [
          {
            name: "中国", // 地图名称
            type: "map", // 系列类型-地图
            map: "china", // 地图类型-与registerMap注册地图的名字相同
            roam: false, // 是否开启鼠标缩放和平移漫游
            zoom: 1.08, // 当前视角的缩放比例
            select: {
              disabled: true, // 数据项图形是否能被选中
            },
            label: {
              normal: {
                show: false, // 是否在数据图形上展示省份名称
              },
            },
            data: dataList, // 渲染的数据列表
          },
        ],
      };
      option && myChart.setOption(option);
    },
js调用逻辑:
js 复制代码
// 省略前置逻辑
// 从后端接口获取要渲染的数据列表 name-对应省份 value-对应数据量
const data = [
        {
          name: "内蒙古",
          value: 6666,
        },
        {
          name: "山东",
          value: 99999,
        },
        {
          name: "青海",
          value: 9999,
        },
        {
          name: "河北",
          value: 999,
        },
        {
          name: "新疆",
          value: 99,
        },
        {
          name: "西藏",
          value: 9,
        },
        {
          name: "四川",
          value: 69999,
        },
        {
          name: "黑龙江",
          value: 28848,
        },
        {
          name: "甘肃",
          value: 54321,
        },
        // 其他数据。。。。
];
// 获取数据列表的最大值
const maxValue = 100000;
// 调用渲染函数 渲染地图数据
this.showMap(data, maxValue);

四、相关资料

china.json地图数据

Echarts.js 配置文档

相关推荐
发现一只大呆瓜16 分钟前
AI流式交互:SSE与WebSocket技术选型
前端·javascript·面试
m0_719084111 小时前
React笔记张天禹
前端·笔记·react.js
Ziky学习记录1 小时前
从零到实战:React Router 学习与总结
前端·学习·react.js
wuhen_n2 小时前
JavaScript链表与双向链表实现:理解数组与链表的差异
前端·javascript
wuhen_n2 小时前
JavaScript数据结构深度解析:栈、队列与树的实现与应用
前端·javascript
狗哥哥2 小时前
微前端路由设计方案 & 子应用管理保活
前端·架构
前端大卫2 小时前
Vue3 + Element-Plus 自定义虚拟表格滚动实现方案【附源码】
前端
却尘3 小时前
Next.js 请求最佳实践 - vercel 2026一月发布指南
前端·react.js·next.js
ccnocare3 小时前
浅浅看一下设计模式
前端
Lee川3 小时前
🎬 从标签到屏幕:揭秘现代网页构建与适配之道
前端·面试