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

文章目录

  • 一、引入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配置,并不难。

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

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

相关文章

接口自动化框架搭建(四):pytest的使用

1&#xff0c;使用说明 网上资料比较多&#xff0c;我这边就简单写下 1&#xff0c;目录结构 2&#xff0c;test_1.py创建两条测试用例 def test_1():print(test1)def test_2():print(test2)3&#xff0c;在pycharm中执行 4&#xff0c;执行结果&#xff1a; 2&#xff0…

Mysql连接报错:1130-host ... is not allowed to connect to this MySql server如何处理

我用navicat连接我的阿里云服务器的mysql服务器的时候,出现了1130的报错。&#xff08;mysql Server version: 5.7.42-0ubuntu0.18.04.1 (Ubuntu)&#xff09; 我来记录一下这个原因&#xff0c;以及修改过程&#xff01; 1.首先进入mysql -u root -p&#xff0c; mysql客户端…

车载电子与软件架构

车载电子与软件架构 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师 (Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝完再挣扎,出门靠自己,四…

Unity LineRenderer的基本了解

在Unity中&#xff0c;LineRenderer组件用于在场景中绘制简单的线条。它通常用于绘制轨迹、路径、激光等效果。 下面来了解下它的基本信息。 1、创建 法1&#xff1a;通过代码创建 using UnityEngine;public class CreateLineRenderer : MonoBehaviour {void Start(){// 创…

排序算法超详细代码和知识点整理(java版)

排序 1、冒泡排序 ​ 两层循环&#xff0c;相邻两个进行比较&#xff0c;大的推到后面去&#xff0c;一共比较“数组长度”轮&#xff0c;每一轮都是从第一个元素开始比较&#xff0c;每一轮比较都会将一个元素固定到数组最后的一个位置。【其实就是不停的把元素往后堆&#…

LLaMA-Factory参数的解答

打开LLaMA-Factory的web页面会有一堆参数 &#xff0c;但不知道怎么选&#xff0c;选哪个&#xff0c;这个文章详细解读一下&#xff0c;每个参数到底是什么含义这是个人写的参数解读&#xff0c;我并非该领域的人如果那个大佬看到有参数不对请反馈一下&#xff0c;或者有补充的…

我于窗中窥月光,恰如仰头见“链表”(Java篇)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

时序预测 | Matlab实现GWO-BP灰狼算法优化BP神经网络时间序列预测

时序预测 | Matlab实现GWO-BP灰狼算法优化BP神经网络时间序列预测 目录 时序预测 | Matlab实现GWO-BP灰狼算法优化BP神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现GWO-BP灰狼算法优化BP神经网络时间序列预测&#xff08;完整源码和数据…

算法学习——LeetCode力扣动态规划篇6

算法学习——LeetCode力扣动态规划篇6 121. 买卖股票的最佳时机 121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 描述 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&…

三元组数据模型:构建知识图谱的基石

目录 前言1. 三元组数据模型概述1.1 定义与结构1.2 特点 2. 三元组在知识图谱中的应用2.1 知识表示2.2 知识推理2.3 数据整合 3 三元组的数据格式3.1 N-Triples &#xff1a;3.2 RDF/XML &#xff1a;3.3 Turtle &#xff08;又称为 Terse RDF Triple Language&#xff09;&…

编程语言|C语言——数组与指针

一、数组 同一类型的变量——元素&#xff08;element&#xff09;集中在一起&#xff0c;在内存上排列成一条直线&#xff0c;这就是数组&#xff08;array&#xff09;。 1.1 一维数组 一维数组的声明 int arr1[10]; int arr2[2 8];#define N 10 int arr3[N];int count 10;…

JavaScript的学习笔记

<script src"index.js" defer></script>&#xff0c;defer的作用是延迟加载index.js文件 定义变量 变量的类型分为两大类&#xff1a;基本类型和复合类型 JavaScript是一种弱类型语言&#xff0c;所以没有强类型语言所具有的int,float,char等等&#x…

无药可医还能怎么办?越没本事的人,越喜欢从别人身上找原因!——早读(逆天打工人爬取热门微信文章解读)

无药可医的病该怎么办呢&#xff1f; 引言Python 代码第一篇 洞见 《骆驼祥子》&#xff1a;越没本事的人&#xff0c;越喜欢从别人身上找原因第二篇 人民日报 来啦 新闻早班车要闻社会政策 结尾 “吾日三省吾身&#xff0c;而后深知自助者天助之。” 在人生的迷宫中 遭遇困境时…

域环境共享文件夹,容量配额管理

首先&#xff0c;我们先创建一个新的磁盘&#xff0c;必须在服务器关机的状态下创建&#xff0c;只有在关机状态下才能创建NVMe类型的磁盘。 打开此电脑&#xff0c;右击创建的磁盘&#xff0c;点击属性。 点击共享&#xff0c;点击高级共享。 将共享此文件夹勾选上&#xff0c…

蓝桥杯 第2945题 课程抢购 C++ Java Python

目录 题目 思路和解题方法 c 代码 Java 版本&#xff08;仅供参考&#xff09; Python 版本&#xff08;仅供参考&#xff09; 代码细节&#xff1a; C 代码细节解释: Python 代码细节解释: lenyan算法笔记 语雀 《lenyan算法笔记》 个人笔记日常更新。含金量不高。/…

ZNC3罗德与施瓦茨ZNC3网络分析仪

181/2461/8938产品概述&#xff1a; 罗德与施瓦茨 ZNC3 网络分析仪的工作频率范围为 9 kHz 至 3 GHz&#xff0c;面向移动无线电和电子产品行业的应用。它具有双向测试装置&#xff0c;用于测量有源和无源 DUT 的所有四个 S 参数。此外&#xff0c;它还提供适合开发和生产中各…

2023年第十四届蓝桥杯大赛软件类省赛C/C++研究生组真题(代码完整题解)

C题-翻转⭐ 标签:贪心 简述:如果 S 中存在子串 101 或者 010,就可以将其分别变为 111 和 000,操作可以无限重复。最少翻转多少次可以把 S 变成和 T 一样。 链接: 翻转 思路:要求步骤最少->S每个位置最多修改一次->从头开始遍历不匹配就翻转->翻转不了就-1 …

esp32中vscode的开发环境

vscode中安装esp32开发环境请参考&#xff1a;CSDN 1、调出esp32的控制面板View ->Command Paletter&#xff0c;或者快捷键&#xff08;ctrshitp&#xff09; 调出esp-idf的样例工程 选择ESP-IDF所在的安装路径 选择一个样例工程&#xff0c;作为工程模板 创建的新工程如…

基于springboot实现课程作业管理系统项目【项目源码+论文说明】

基于springboot实现课程作业管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;课程作业管理系统当然也不能排除在外。课程作业管理系统是以实际运用为开发背景…

swift中的autoreleasepool(自动释放池)有用么?

想到一个问题 swift中的autoreleasepool(自动释放池)有用么? 我们进行验证一下 首先我们写一个加载图片的方法,保证会真正用到真实的IMP内存func loadBigData(string: String?) {if let path Bundle.main.path(forResource: "big", ofType: "png") {for…