首页 > 其他分享 >React+echarts (echarts-for-react) 画中国地图及省份切换

React+echarts (echarts-for-react) 画中国地图及省份切换

时间:2022-11-15 12:13:20浏览次数:77  
标签:React name 缩放 series 地图 options react echarts

有足够的地图数据,可以点击到街道,示例我只出到市级

以umi为框架,版本是:

  "react": "^18.2.0",   "umi": "^4.0.29",   "echarts": "^5.4.0",   "echarts-for-react": "^3.0.2", 示例图:

示例中需要地图的Geojson数据,中国地图和省份的 geoJson 可以在 echarts-map 或者阿里的 数据可视化中心 进行下载。(我这边示例用的是阿里的数据)

 

废话少说,上代码:

 1 import EChartsReact from 'echarts-for-react';
 2 import * as echarts from 'echarts';
 3 import china from "@/assets/MapJson/全国.json"; //默认引入全国地图
 4 import { useRef, } from 'react';
 5 echarts.registerMap('map', china);//默认注册全国地图
 6 export default () => {
 7     let curRef = useRef(null);
 8     let height = window.screen.availHeight
 9 
10     let option = {
11         title: {
12             text: '全国地图',
13             textStyle: {
14                 color: "#000",
15             },
16             left: 'center',
17         },
18         series: [
19             {
20                 name: '全国地图',
21                 type: 'map',
22                 mapType: 'map',
23                 scaleLimit: {
24                     //滚轮缩放的极限控制
25                     min: 0.5, //缩放最小大小
26                     max: 10, //缩放最大大小
27                 },
28 
29                 label: { // 图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。
30                     show: true, //显示省市名称
31                     position: [1, 100], // 相对的百分比
32                     fontSize: 12,
33                     offset: [2, 0], // 是否对文字进行偏移。默认不偏移。例如:`[30, 40]` 表示文字在横向上偏移 `30`,纵向上偏移 `40`。
34                     align: "left" // 文字水平对齐方式,默认自动。
35                 },
36                 itemStyle: { // 地图区域的多边形 图形样式
37                     areaColor: "#fff" // 地图图形颜色
38                 },
39                 roam: true, // 是否开启鼠标缩放和平移漫游。默认不开启。如果只想要开启缩放或者平移,可以设置成 `'scale'` 或者 `'move'`。设置成 `true` 为都开启
40                 zoom: 1.25, // 当前视角的缩放比例
41             }
42         ]
43     }
44 
45     return <div className='bazaarMap'>
46         <EChartsReact option={option} ref={curRef} style={{ width: '100%', height: height, zIndex: 222 }}
47             lazyUpdate={true} notMerge={true} onEvents={{
48                 'click': (param: any) => {//echarts点击事件
49                     if (param.name) {//判断名称是否为空
50                         const echartInstance = curRef.current.getEchartsInstance();//获取echarts实例
51                         let options = echartInstance.getOption()//获取option
52 
53                         let provinceJSON = null
54                         try {
55                             provinceJSON = require(`@/assets/MapJson/${param.name}.json`);//根据点击的省名称查询Geojson地图数据(我是将地图数据全部保存在本地,可根据API获取地图json)
56                             echarts.registerMap('map', provinceJSON);//注册点击的省份地图
57 
58                             options.title[0].text = param.name + '地图'
59                             options.series[0].name = param.name + '地图'
60                             
61                             // options.series[0].center = china.features.find(item => item.properties.name === param.name)?.properties?.center//修改点击后地图中心位置,不用会存在偏移,我使用下边null,默认全局居中
62                             options.series[0].center = null;  //修改点击后地图中心位置,null默认全局居中
63                             echartInstance.setOption(options, true)//修改echarts option
64                         } catch (error) {//获取Geojson地图异常返回到全国地图,我只存在市级地图数据,所以点击市级行政区会返回到全国地图。
65                             options.title[0].text = '全国地图'
66                             echarts.registerMap('map', china);
67                             options.series[0].name = '全国地图'
68                             
69                             options.series[0].center = null
70                             echartInstance.setOption(options, true)
71                         }
72                     }
73                 },
74             }} />
75     </div>
76 }

 

地图Geojson数据存放路径:src\assets\MapJson

 

 

 亲测可用!

 

标签:React,name,缩放,series,地图,options,react,echarts
From: https://www.cnblogs.com/Yu-Shuai/p/16891992.html

相关文章

  • ECharts基础概念
    简要介绍下ECharts中的基础概念:1、echarts实例:一个网页中可以创建多个echarts实例。每个echarts实例中可以创建多个图表和坐标系等。dom节点作为echarts的渲染容器,......
  • 详解React的Transition工作原理原理
    Transition使用姿势Transition是react18引入的新概念,用来区分紧急和非紧急的更新。紧急的更新,指的是一些直接的用户交互,如输入、点击等;非紧急的更新,指的是UI界面......
  • 经常被问到的react-router实现原理详解
    在单页面应用如日中天发展的过程中,备受关注的少了前端路由。而且还经常会被xxx面试官问到,什么是前端路由,它的原理的是什么,它是怎么实现,跳转不刷新页面的...一大堆为什么,......
  • 详细解读 React useCallback & useMemo
    前言阅读本文章需要对Reacthooks中useState和useEffect有基础的了解。我的这篇文章内有大致介绍在React项目中全量使用Hooks。useCallbackuseCallback的作......
  • react hooks echart自适应解决方案
    //index.tsximportReact,{useEffect,useRef,useState}from"react";import*asechartsfrom"echarts";importuseEchartResizerfrom"./useEchartResizer";......
  • 面试官:React怎么做性能优化
    前言最近一直在学习关于React方面的知识,并有幸正好得到一个机会将其用在了实际的项目中。所以我打算以博客的形式,将我在学习和开发(React)过程中遇到的问题记录下来。这两......
  • 我的react面试题笔记整理(附答案)
    shouldComponentUpdate有什么用?为什么它很重要?组件状态数据或者属性数据发生更新的时候,组件会进入存在期,视图会渲染更新。在生命周期方法shouldComponentUpdate中,允许选......
  • 面试官让你说说react状态管理?
    开发者普遍认为状态是组件的一部分,但是同时却又在剥离状态上不停的造轮子,这不是很矛盾么?对于一个最简单的文本组件而言functionText(){const[text,setText]=......
  • 我的react面试题整理2(附答案)
    如何在React中使用innerHTML增加dangerouslySetInnerHTML属性,并且传入对象的属性名叫_htmlfunctionComponent(props){return<divdangerouslySetInnerHTML={{_htm......
  • React组件基础四
    一.组件生命周期概述意义:组件的生命周期有助于理解组件的运行方式、完成更复杂的组件功能、分析组件错误原因等组件的生命周期:组件从被创建到挂载到页面中运行,再到组......