在react项目用echarts绘制中国地图

news2024/11/25 3:05:22

文章目录

  • 一、引入echarts
  • 二、下载地图json数据
  • 三、编写react组件
  • 四、组件使用

一、引入echarts

安装:npm i echarts --save
在这里插入图片描述

二、下载地图json数据

由于echarts内部不再支持地图数据,所以要绘制地图需要自己去下载数据。建议使用阿里云的。
地址:https://datav.aliyun.com/portal/school/atlas/area_selector

在这里插入图片描述
默认展示的是全国地图,如果想要某市的json数据,点击对应省份即可。

本文中直接复制了json数据,然后将数据保存为geoJson.js,如下:
在这里插入图片描述

三、编写react组件

// components/chinaMap/index.tsx

import { useRef, useEffect } from "react";
import * as echarts from "echarts";
import { geoJson } from "./geoJson";

const ChinaMap = ({
  option,
  width = "100%",
  height = "100%",
}: {
  option: any;
  width?: string;
  height?: string;
}) => {
  const ref = useRef(null);
  let mapInstance: echarts.ECharts | null;

  const renderMap = () => {
    if (ref.current) {
      const renderedMapInstance = echarts.getInstanceByDom(ref.current);
      if (renderedMapInstance) {
        mapInstance = renderedMapInstance;
      } else {
        mapInstance = echarts.init(ref.current);
      }
      mapInstance.setOption(option);
    }
  };

  useEffect(() => {
    echarts.registerMap("china", geoJson as any);
    renderMap();
    // eslint-disable-next-line react-hooks/exhaustive-deps
  }, []);

  useEffect(() => {
    window.onresize = function () {
      // 调用 echarts实例上 resize 方法
      mapInstance?.resize();
    };
    return () => {
      // 销毁实例,销毁后实例无法再被使用。
      mapInstance && mapInstance.dispose();
    };
    // eslint-disable-next-line react-hooks/exhaustive-deps
  }, []);

  return <div ref={ref} style={{ width: width, height: height }} />;
};

export default ChinaMap;

四、组件使用

// src/views/home/chart/map.tsx

import React from "react";
import ChinaMap from "@/components/chinaMap/index";

const dataList = [
  {
    value: 218,
    name: "北京",
  },
  {
    value: 122,
    name: "广东",
  },
  {
    value: 119,
    name: "台湾",
  },
  {
    value: 81,
    name: "香港",
  },
  {
    value: 74,
    name: "山东",
  },
  {
    value: 68,
    name: "江苏",
  },
  {
    value: 62,
    name: "浙江",
  },
  {
    value: 49,
    name: "上海",
  },
  {
    value: 48,
    name: "河北",
  },
  {
    value: 43,
    name: "河南",
  },
  {
    value: 41,
    name: "辽宁",
  },
  {
    value: 38,
    name: "NULL",
  },
  {
    value: 36,
    name: "四川",
  },
  {
    value: 33,
    name: "湖北",
  },
  {
    value: 31,
    name: "湖南",
  },
  {
    value: 29,
    name: "安徽",
  },
  {
    value: 28,
    name: "吉林",
  },
  {
    value: 26,
    name: "江西",
  },
  {
    value: 24,
    name: "新疆",
  },
  {
    value: 24,
    name: "重庆",
  },
  {
    value: 23,
    name: "福建",
  },
  {
    value: 19,
    name: "广西",
  },
  {
    value: 18,
    name: "山西",
  },
  {
    value: 16,
    name: "云南",
  },
  {
    value: 16,
    name: "内蒙古",
  },
  {
    value: 16,
    name: "黑龙江",
  },
  {
    value: 12,
    name: "陕西",
  },
  {
    value: 12,
    name: "天津",
  },
  {
    value: 11,
    name: "宁夏",
  },
  {
    value: 10,
    name: "甘肃",
  },
  {
    value: 8,
    name: "贵州",
  },
  {
    value: 4,
    name: "西藏",
  },
  {
    value: 4,
    name: "青海",
  },
  {
    value: 1,
    name: "海南",
  },
];

const Map: React.FC = () => {
  const option: any = {
    title: {
      text: "数据地图",
      // subtext: "数据来源于阿里云平台",
      // sublink: "https://datav.aliyun.com/portal/school/atlas/area_selector",
      left: "right",
      textStyle: {
        color: "#000",
      },
    },
    // 提示框
    tooltip: {
      trigger: "item",
      showDelay: 0,
      transitionDuration: 0.2,
      formatter: (params: any) => {
        const { data = {} } = params;
        const { value = 0 } = data;
        return `${params.name}<br/>数量: ${value}`;
      },
    },
    // 工具导航
    toolbox: {
      show: true,
      left: "left",
      top: "top",
      feature: {
        // dataView: { readOnly: false },
        restore: {},
        saveAsImage: {},
      },
    },
    // 地图数据
    dataset: {
      source: dataList,
    },
    series: {
      type: "map",
      map: "china",
      roam: true, // 地图拖动、缩放
      top: "10%", // 距离顶部距离
      zoom: 1.2, // 当前视角的缩放比例
      scaleLimit: {
        max: 2,
        min: 1, // 设置默认缩放效果
      },
      // 文本标签,地区名, 控制样式,位置等等,可以是数组,多个
      label: {
        show: true, // 默认状态下,显示省市名称
        position: [1, 100], // 相对的百分比
        fontSize: 12,
        offset: [2, 0],
        align: "left",
      },
      itemStyle: {
        areaColor: "#e5f7ff", // 地图图形颜色 #fff
        // borderColor: "#a0d4e7", // 地图边框线色
        // borderWidth: 1, // 地图边框线宽
      },
      // 高亮状态下的多边形和文本样式,鼠标悬浮在地图块上的效果
      emphasis: {
        itemStyle: {
          areaColor: "#ccc",
          borderColor: "#4aacd9",
        },
      },
    },
    // 视觉映射组件
    visualMap: {
      type: "continuous",
      left: "right",
      min: 0,
      max: 218,
      inRange: {
        color: [
          "#e5f7ff",
          "#096dd9",
          // "#fedeb5",
          // "#f96a35",
          // "#c3380e",
          // "#942005",
          // "#5b1305",
        ],
      },
      text: [`最大值:218`, 0],
      textStyle: {
        color: "#000",
      },
      // calculable: true
    },
  };
  return (
    <>
      <ChinaMap option={option} height="80vh" width="100%" />;
    </>
  );
};

export default Map;

展示如下:
在这里插入图片描述
本文项目源码:https://download.csdn.net/download/ganyingxie123456/88800965?spm=1001.2014.3001.5503

echarts使用地图主要就是要先下载相关地理数据,其次就是按需求进行常规的option配置,并不难。

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

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

相关文章

mysql 用户管理-权限管理

学习了用户管理&#xff0c;再学习下权限管理。 3&#xff0c;权限管理 权限管理主要是对登录到MySQL的用户进行权限验证。所有用户的权限都存储在MySQL的权限表中&#xff0c;不合理的权限规划会给MySQL服务器带来安全隐患。数据库管理员要对所有用户的权限进行合理规…

14 - grace数据处理 - 泄露误差改正 - 空域滤波法(Mascon法)

@[TOC](grace数据处理 - 泄露误差改正 - 空域滤波法(Mascon法)) 空域法的基本思想是假设地面某区域的质量变化是由一系列位置已知、质量未知的质量块(小范围区域)引起的,那么将GRACE反演的结果归算到n个质量块上的过程就是泄露信号恢复的过程。个人理解是这样的:假定已知研…

EfficientNetV2:谷歌又来了,最小的模型,最高的准确率,最快的训练速度 | ICML 2021

论文基于training-aware NAS和模型缩放得到EfficientNetV2系列&#xff0c;性能远优于目前的模型。另外&#xff0c;为了进一步提升训练速度&#xff0c;论文提出progressive learning训练方法&#xff0c;在训练过程中同时增加输入图片尺寸和正则化强度。从实验结果来看&#…

西南交大swjtu算法实验3.3|穷举法

1.实验目的 通过具体例子学习排列这种典型的穷举算法的求解过程以及程序框架&#xff0c;分析其算法的求解过程&#xff0c;以及如何设计穷举法解决实际问题。通过本实验&#xff0c;理解穷举法的特点以及实际应用中的局限性。 2.实验任务 有n (n>1&#xff09;个任务需要…

Java- maven下载jar包,提示找不到,Could not find artifact

1、执行下面命令行 mvn install:install-file -Dfile/home/quangang/桌面/isv-sdk-2.0.jar -DgroupIdcom.jd -DartifactIdisv-sdk -Dversion2.0 -Dpackangjar 2、然后这里要加上jar包

初识C++ · 入门(2)

目录 1 引用 1.1引用的概念 1.2 引用的特性 2 传值&#xff0c;传引用的效率 3 引用和指针的区别 4 内联函数 4.1 内联函数的定义 4. 2 内联函数的特性 5 关键字auto 5.1关于命名的思考 5.2 关于auto的发展 5.3 auto使用规则 6 范围for的使用 7 空指针 1 引用 …

leetcode刷题---链表

目录 1.删除链表的倒数第N个节点两两交换链表中的节点反转链表2 1.删除链表的倒数第N个节点 根据题目描述&#xff0c;第一个思路是存到数组中对数组进行操作&#xff0c;想到数组我们就可以想到下标和倒数第N个的关系&#xff0c;所以我们可以不额外开空间&#xff0c;可以直接…

阿里云2核4G5M云服务器ECS u1实例性能测评

阿里云服务器ECS u1实例&#xff0c;2核4G&#xff0c;5M固定带宽&#xff0c;80G ESSD Entry盘优惠价格199元一年&#xff0c;性能很不错&#xff0c;CPU采用Intel Xeon Platinum可扩展处理器&#xff0c;购买限制条件为企业客户专享&#xff0c;实名认证信息是企业用户即可&a…

Python问题列表

文章目录 1、使用pip安装的模块都存放到哪里了&#xff1f;2、安装fitz包报错&#xff0c;如何解决&#xff1f;3、python代码运行时&#xff0c;控制台输出乱码如何解决。4、vscode中第三方库不自动补齐 1、使用pip安装的模块都存放到哪里了&#xff1f; 答&#xff1a; pip是…

数据库安全(redis、couchdb、h2database)CVE复现

redis服务默认端口&#xff1a;6379&#xff1b;我们可以通过端口扫描来判断是否存在该服务。 Redis 是一套开源的使用ANSI C 编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库&#xff0c;并提供多种语言的API。 Redis 如果在没有开启认证的情况下&#xff0c;…

基于STM32的武警哨位联动报警系统设计,支持以太网和WIFI通信

1.功能 本文提出的武警报警信息系统终端&#xff0c;可实现报警和联动响应&#xff0c;支持以太网和WIFI两种通信模式&#xff0c;可实现移动哨位报警和固定哨位报警&#xff0c;语音和显示报警信息用户可自行定制。 本终端主要由STM32F103处理器模块和C8051F340处理器模块构…

Linux中断管理:(一)中断号的映射

文章说明&#xff1a; Linux内核版本&#xff1a;5.0 架构&#xff1a;ARM64 参考资料及图片来源&#xff1a;《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址&#xff1a; zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. 中断控制器 Linux 内核支持众多…

K8S之Configmap的介绍和使用

Configmap Configmap概述Configmap的简介Configmap能解决的问题Configmap应用场景局限性 Configmap创建方法通过命令行直接创建通过文件创建指定目录创建编写Configmap资源清单Yaml文件 Configmap的使用案例通过环境变量引入&#xff1a;使用configMapKeyRef通过环境变量引入&a…

QSpice-(2) 添加外部库和波形操作

Hi,uu们,是不是发现QSpice的库元器件比较少,和其他仿真工具相比少的不是一星半点,所以我们可以用外部下载的库文件去补齐这个缺陷,不知道去哪里下载库?可以看看eeworld的这个网址,里面我放了一些库下载的路径,以及LTspice仿真教程. EEworld LtSpice的库文件下载地址: http:/…

记录阿里云服务器VNC登录一直显示Login Incorrect的问题

想要尝试通过VNC实例登录&#xff0c;结果一直提示Login Incorrect 怀疑自己忘记密码后&#xff0c;重置了几次密码还是登录不上去 解决&#xff1a; 发现阿里云把我小键盘的 ""识别为了 “” 号 但是主键盘区域的 键就没有错位 等就是等 加就是加 而小键盘区…

ROS中IMU惯性测量单元

一、IMU惯性测量单元消息包 IMU 是安装在机器人内部的一种传感器模块&#xff0c;用于测量机器人的空间姿态。 IMU的消息包定义在sensor_msgs包中的Imu中。头部是header&#xff0c;记录了消息发送的时间戳和坐标系ID。第二个是角速度。第三个是矢量加速度。三个数据成员都各…

深度学习网络缝合模块学习

主干网络缝合模块------>缝模块对其通道数 1缝合模块只看通道数 2把模块复制到模型中 3在forward中查看通道数是多少 4在init中进行实例化&#xff0c;注意通道数是上一步forward的通道数 5在forward中加载init中的实例化 6模型实例化测试模块是否加入 模块和模块之前…

【OS探秘】【虚拟化】【软件开发】VirtualBox 虚拟化软件卸载和重装

往期OS系列博文&#xff1a; 【OS探秘】【虚拟化】【软件开发】在Windows 11上安装mac OS虚拟机 【OS探秘】【虚拟化】【软件开发】在Windows 11上安装Kali Linux虚拟机 一、事出有因 近日&#xff0c;笔者的Oracle VM VirtualBox突然抽风了&#xff0c;虚拟机无法启动&…

【Spring Security】 快速入门

文章目录 一、 身份认证Demo1、创建工程2、代码编写2.1、Controller2.2、Html2.3、application.properties配置 3、启动项目并访问 二、Spring Security 默认做了什么二、底层原理1.概述2.FiltersDelegatingFilterProxyFilterChainProxySecurityFilterChainSecurity Filters 三…

CAJViewer7.3 下载地址及安装教程

CAJViewer是中国学术期刊&#xff08;CAJ&#xff09;全文数据库的专用阅读软件。CAJViewer是中国知识资源总库&#xff08;CNKI&#xff09;开发的一款软件&#xff0c;旨在方便用户在线阅读和下载CAJ数据库中的学术论文、期刊和会议论文等文献资源。 CAJViewer具有直观的界面…