react+echarts实现地图

  6 import React, { Component } from ‘react‘;
  7 import axios from ‘axios‘;
  8 import echarts from ‘echarts/lib/echarts‘;
  9 import ‘echarts/lib/component/tooltip‘;
 10 import ‘echarts/lib/component/title‘;
 11 import ‘echarts/lib/component/visualMap‘;
 12 import ‘echarts/lib/chart/map‘;
 13 import ‘echarts/map/js/china‘;
 14 import { Modal, Table } from ‘tinper-bee‘;
 15 import sort from ‘bee-table/build/lib/sort‘;
 16
 17 const SortTable = sort(Table);
 18 // 展示表表头
 19 const columns = [
 20     {
 21         title: ‘序号‘,
 22         dataIndex: ‘index‘,
 23         key: ‘index‘,
 24         render(record, text, index) {
 25             return index + 1;
 26         }
 27     },
 28     { title: ‘产品条码‘, dataIndex: ‘softdog‘, key: ‘softdog‘ },
 29     { title: ‘机构‘, dataIndex: ‘organizname‘, key: ‘organizname‘, sorter: (a, b) => a.organizname.localeCompare(b.organizname, ‘zh‘) },
 30     { title: ‘部署模式‘, dataIndex: ‘cloudtype‘, key: ‘cloudtype‘, sorter: (a, b) => a.cloudtype.localeCompare(b.cloudtype, ‘zh‘) },
 31     { title: ‘直销分销‘, dataIndex: ‘saletype‘, key: ‘saletype‘, sorter: (a, b) => a.saletype.localeCompare(b.saletype, ‘zh‘) },
 32     { title: ‘客户名称‘, dataIndex: ‘corpname‘, key: ‘corpname‘, sorter: (a, b) => a.corpname.localeCompare(b.corpname, ‘zh‘) },
 33     { title: ‘行业大类‘, dataIndex: ‘industry‘, key: ‘industry‘, sorter: (a, b) => a.industry.localeCompare(b.industry, ‘zh‘) },
 34     { title: ‘行业分类‘, dataIndex: ‘industrydetail‘, key: ‘industrydetail‘, sorter: (a, b) => a.industrydetail.localeCompare(b.industrydetail, ‘zh‘) },
 35     { title: ‘签约金额(万)‘, dataIndex: ‘signmny‘, key: ‘signmny‘, sorter: (a, b) => a.signmny - b.signmny },
 36     { title: ‘收款金额(万)‘, dataIndex: ‘collectmny‘, key: ‘collectmny‘, sorter: (a, b) => a.collectmny - b.collectmny },
 37     { title: ‘签约时间‘, dataIndex: ‘billmakedate‘, key: ‘billmakedate‘ }
 38 ];
 39 class ProjectProvinceMap extends Component {
 40     constructor(props) {
 41         super(props);
 42         this.handleClick = this.handleClick.bind(this);
 43         this.openOrClose = this.openOrClose.bind(this);
 44         this.state = {
 45             mapdata: null,
 46             currprovince: ‘‘,
 47             showdetail: false,
 48             content: []
 49         };
 50     }
 51     async componentWillMount() {
 52         const promap = await axios.post(‘*******‘);
 53         if (promap.data.success === ‘success‘) {
 54             this.setState({
 55                 mapdata: promap.data.detailMsg.data,
 56                 showdetail: false
 57             });
 58             const ProjectProvinceMapChart = echarts.init(document.getElementById(‘ProjectProvinceMap‘));
 59             ProjectProvinceMapChart.setOption({
 60                 title: {
 61                     // 是否显示
 62                     show: true,
 63                     // 主标题文本,‘\n‘指定换行
 64                     text: `U8 cloud项目分布(总计:${this.state.mapdata.allnum})`,
 65                     left: ‘center‘,
 66                     y: ‘10px‘,
 67                 },
 68                 // 工具提示
 69                 tooltip: {
 70                     // 显示策略,可选为:true(显示) | false(隐藏)
 71                     show: true,
 72                     // tooltip主体内容显示策略,只需tooltip触发事件或显示axisPointer而不需要显示内容时可配置该项为false
 73                     showContent: true,
 74                     // 触发类型,默认数据触发,见下图,可选为:‘item‘ | ‘axis‘
 75                     trigger: ‘item‘,
 76                     // 位置指定,传入{Array},如[x, y], 固定位置[x, y];
 77                     // 传入{Function},如function([x, y]) {return [newX,newY]},
 78                     // 默认显示坐标为输入参数,用户指定的新坐标为输出返回。
 79                     // position: getTooltipPosition(0,0),
 80                     // 内容格式器:{string}(Template) | {Function},支持异步回调
 81                     // 拖拽重计算独有,数据孤岛内容格式器:{string}(Template) | {Function},见表格下方
 82                     // islandFormatter:
 83                     // 显示延迟,添加显示延迟可以避免频繁切换,特别是在详情内容需要异步获取的场景,单位ms
 84                     showDelay: 0,
 85                     // 隐藏延迟,单位ms
 86                     hideDelay: 0,
 87                     // 动画变换时长,单位s,如果你希望tooltip的跟随实时响应,
 88                     // showDelay设置为0是关键,同时transitionDuration设0也
 89                     // 会有交互体验上的差别。
 90                     transitionDuration: 0
 91                 },
 92                 legend: {
 93                     // 显示策略,可选为:true(显示) | false(隐藏)
 94                     show: false,
 95                     // 布局方式,默认为水平布局,可选为:‘horizontal‘ | ‘vertical‘
 96                     orient: ‘vertical‘,
 97                     // 水平安放位置,默认为全图居中,可选为:‘center‘ | ‘left‘ | ‘right‘ | {number}(x坐标,单位px)
 98                     x: ‘left‘,
 99                     // 垂直安放位置,默认为全图顶端,可选为:‘top‘ | ‘bottom‘ | ‘center‘ | {number}(y坐标,单位px)
100                     y: ‘top‘,
101                     // 图例背景颜色,默认透明
102                     backgroundColor: ‘rgba(0,0,0,0.1)‘,
103                     // 图例边框颜色
104                     borderColor: ‘#0066FF‘,
105                     // 图例边框线宽,单位px,默认为0(无边框)
106                     borderWidth: 1,
107                     // 图例内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距,同css
108                     padding: [15, 15, 15, 15],
109                     // 各个item之间的间隔,单位px,默认为10,横向布局时为水平间隔,纵向布局时为纵向间隔
110                     itemGap: 20,
111                     // 图例图形宽度
112                     itemWidth: 30,
113                     // 图例图形高度
114                     itemHeight: 20,
115                     // 默认只设定了图例文字颜色,更个性化的是,要指定文字颜色跟随图例,可设color为‘auto‘
116                     textStyle: {
117                         // 颜色
118                         color: ‘#FF7F50‘,
119                         // 水平对齐方式,可选为:‘left‘ | ‘right‘ | ‘center‘
120                         align: ‘left‘,
121                         // 垂直对齐方式,可选为:‘top‘ | ‘bottom‘ | ‘middle‘
122                         baseline: ‘bottom‘,
123                         // 字体系列
124                         fontFamily: ‘Arial, 宋体, sans-serif‘,
125                         // 字号 ,单位px
126                         fontSize: 20,
127                         // 样式,可选为:‘normal‘ | ‘italic‘ | ‘oblique‘
128                         fontStyle: ‘italic‘,
129                         // 粗细,可选为:‘normal‘ | ‘bold‘ | ‘bolder‘ | ‘lighter‘ | 100 | 200 |... | 900
130                         fontWeight: ‘normal‘
131                     },
132                     // 文本格式器:{string}(Template) | {Function},模板变量为‘{name}‘,函数回调参数为name
133                     // 选择模式,默认开启图例开关,可选single,multiple
134                     selectedMode: true,
135                     // 配置默认选中状态,可配合LEGEND.SELECTED事件做动态数据载入
136                     // 图例内容数组
137                     data: []
138                 },
139                 // 值域选择,每个图表最多仅有一个值域控件
140                 dataRange: {
141                     show: true,
142                     x: ‘90%‘,
143                     y: ‘70%‘,
144                     splitList: [
145                         { start: this.state.mapdata.datarange[4], color: ‘#4D98D9‘ },
146                         { start: this.state.mapdata.datarange[3], end: this.state.mapdata.datarange[4], color: ‘#6FADDE‘ },
147                         { start: this.state.mapdata.datarange[2], end: this.state.mapdata.datarange[3], color: ‘#95C2E3‘ },
148                         { start: this.state.mapdata.datarange[1], end: this.state.mapdata.datarange[2], color: ‘#BAD3E7‘ },
149                         { start: 1, end: this.state.mapdata.datarange[1], color: ‘#E1E6EC‘ }
150                     ],
151                     // color: [‘#D7C799‘, ‘#D7A07A‘, ‘#D75953‘, ‘#D72937‘, ‘#D70F30‘]
152                 },
153                 // 工具箱,每个图表最多仅有一个工具箱
154                 toolbox: {
155                     // 显示策略,可选为:true(显示) | false(隐藏)
156                     show: false,
157                     // 布局方式,默认为水平布局,可选为:‘horizontal‘ | ‘vertical‘
158                     orient: ‘horizontal‘,
159                     // 水平安放位置,默认为全图居中,可选为:‘center‘ | ‘left‘ | ‘right‘ | {number}(x坐标,单位px)
160                     x: ‘right‘,
161                     // 垂直安放位置,默认为全图顶端,可选为:‘top‘ | ‘bottom‘ | ‘center‘ | {number}(y坐标,单位px)
162                     y: ‘bottom‘,
163                     // 工具箱背景颜色,默认透明
164                     backgroundColor: ‘rgba(218,112,214,0.6)‘,
165                     // 工具箱边框颜色
166                     borderColor: ‘#0066FF‘,
167                     // 工具箱边框线宽,单位px,默认为0(无边框)
168                     borderWidth: 1,
169                     // 工具箱内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距,同css
170                     padding: [15, 15, 15, 15],
171                     // 各个item之间的间隔,单位px,默认为10,横向布局时为水平间隔,纵向布局时为纵向间隔
172                     itemGap: 20,
173                     // 工具箱icon大小,单位(px)
174                     itemSize: 20,
175                     // 工具箱icon颜色序列,循环使用,同时支持在具体feature内指定color
176                     color: [‘#1e90ff‘, ‘#22bb22‘, ‘#4b0082‘, ‘#d2691e‘],
177                     // 禁用颜色定义
178                     disableColor: ‘#fff‘,
179                     // 生效颜色定义
180                     effectiveColor: ‘red‘,
181                     // 是否显示工具箱文字提示,默认启用
182                     showTitle: true,
183                     // 工具箱提示文字样式
184                     textStyle: {
185                         // 颜色
186                         color: ‘#FF7F50‘,
187                         // 水平对齐方式,可选为:‘left‘ | ‘right‘ | ‘center‘
188                         align: ‘left‘,
189                         // 垂直对齐方式,可选为:‘top‘ | ‘bottom‘ | ‘middle‘
190                         baseline: ‘bottom‘,
191                         // 字体系列
192                         fontFamily: ‘Arial, 宋体, sans-serif‘,
193                         // 字号 ,单位px
194                         fontSize: 20,
195                         // 样式,可选为:‘normal‘ | ‘italic‘ | ‘oblique‘
196                         fontStyle: ‘italic‘,
197                         // 粗细,可选为:‘normal‘ | ‘bold‘ | ‘bolder‘ | ‘lighter‘ | 100 | 200 |... | 900
198                         fontWeight: ‘normal‘
199                     }
200                 },
201                 // 缩放漫游组件,仅对地图有效
202                 roamController: {
203                     // 显示策略,可选为:true(显示) | false(隐藏)
204                     show: false,
205                     // 水平安放位置,默认为左侧,可选为:‘center‘ | ‘left‘ | ‘right‘ | {number}(x坐标,单位px)
206                     x: ‘right‘,
207                     // 垂直安放位置,默认为全图顶端,可选为:‘top‘ | ‘bottom‘ | ‘center‘ | {number}(y坐标,单位px)
208                     y: ‘top‘,
209                     // 指定宽度,决定4向漫游圆盘大小,可指定 {number}(宽度,单位px)
210                     width: 120,
211                     // 指定高度,缩放控制键默认会在指定高度的最下方最大化显示,可指定 {number}(高度,单位px)
212                     height: 200,
213                     // 缩放漫游组件背景颜色,默认透明
214                     backgroundColor: ‘rgba(0,0,0,0.1)‘,
215                     // 缩放漫游组件边框颜色
216                     borderColor: ‘#1e90ff‘,
217                     // 缩放漫游组件边框线宽,单位px,默认为0(无边框)
218                     borderWidth: 1,
219                     // 缩放漫游组件内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距,同css
220                     padding: [15, 15, 15, 15],
221                     // 漫游组件文字填充颜色
222                     fillerColor: ‘#000‘,
223                     // 控制手柄主体颜色
224                     handleColor: ‘#e3655a‘,
225                     // 4向漫游移动步伐,单位px
226                     step: 10,
227                     // 必须,指定漫游组件可控地图类型
228                     mapTypeControl: {
229                         china: true
230                     }
231                 },
232                 series: [
233                     {
234                         // 图表类型,必要参数!如为空或不支持类型,则该系列数据不被显示。可选为:
235                         // ‘line‘(折线图) | ‘bar‘(柱状图) | ‘scatter‘(散点图) | ‘k‘(K线图)
236                         // ‘pie‘(饼图) | ‘radar‘(雷达图) | ‘chord‘(和弦图) | ‘force‘(力导向布局图) | ‘map‘(地图)
237                         type: ‘map‘,
238                         // 系列名称
239                         name: ‘项目数量‘,
240                         // 地图类型,支持world,china及全国34个省市自治区
241                         mapType: ‘china‘,
242                         // 是否开启滚轮缩放和拖拽漫游,默认为false(关闭),
243                         // 其他有效输入为true(开启),‘scale‘(仅开启滚轮缩放),
244                         // ‘move‘(仅开启拖拽漫游)
245                         roam: false,
246                         // 图形样式
247                         itemStyle: {
248                             // 默认状态下地图的文字
249                             normal: {
250                                 label: { show: true },
251                                 borderWidth: 0.5, // 区域边框宽度
252                                 borderColor: ‘#678096‘, // 区域边框颜色
253                                 areaColor: ‘#FFFFFF‘, // 区域颜色
254                             },
255                             // 鼠标放到地图上面显示文字
256                             emphasis: {
257                                 label: {
258                                     show: true
259                                 }
260                             }
261                         },
262                         data: this.state.mapdata.list
263                     }
264                 ]
265             });
266             ProjectProvinceMapChart.on(‘click‘, this.handleClick);
267         }
268     }
269     handleClick(params) {
270         axios.post(‘*******‘, { province: params.data.name }).then((res) => {
271             if (res.data.success === ‘success‘) {
272                 this.setState({
273                     showdetail: true,
274                     currprovince: params.data.name,
275                     content: res.data.detailMsg.data
276                 });
277             }
278         });
279     }
280     openOrClose() {
281         this.setState({
282             showdetail: false
283         });
284     }
285     render() {
286         return (
287             <div style={{ width: ‘90%‘, height: ‘600px‘ }}>
288                 <div id="ProjectProvinceMap" style={{ width: ‘90%‘, height: ‘600px‘ }} />
289                 <Modal show={this.state.showdetail} onHide={this.openOrClose} style={{ width: ‘90%‘, height: ‘600px‘ }}>
290                     <Modal.Header closeButton style={{ padding: ‘10px‘ }}>
291                         <Modal.Title >
292                             {this.state.currprovince}
293                         </Modal.Title>
294                     </Modal.Header >
295                     <Modal.Body style={{ padding: ‘5px‘ }}>
296                         <div style={{ width: ‘100%‘, height: ‘600px‘, overflowY: ‘auto‘ }}>
297                             <SortTable
298                                 data={this.state.content}
299                                 columns={columns}
300                                 rowKey="billcode"
301                                 style={{ margin: ‘5px‘ }}
302                             />
303                         </div>
304                     </Modal.Body>
305                 </Modal>
306             </div>
307         );
308     }
309 }
310 export default ProjectProvinceMap;

原文地址:https://www.cnblogs.com/zanderblogs/p/9083827.html

时间: 2024-10-26 04:34:05

react+echarts实现地图的相关文章

数据视化Echarts+百度地图API实现市县区级下钻

开始 这两天公司有个页面需要做数据可视化的展示,数据视化采用的是Echarts+百度地图API做展示,需要用到县级区级下钻的一个联动效果发现网上关于Echarts做到县区级下钻的资料很少,有的话也不是很详细,对于刚接触Echarts的让人来说可能有些搞不明白,在这里我把Echarts下钻开发过程中总结的知识分享给大家,也能使自己加深印象,当然啦,对于一些在软件行业折腾了几年的老油条来说,这些都是一些非常基础的东西.但是还是希望能帮助到那些刚接触Echarts遇到类似问题需要帮助的人.如果哪里写的

echarts Map(地图) 不同颜色区块显示

echarts Map(地图) 不同区块显示 这里以重庆地图为例 配置项: var option = { title : { text: '重庆市', subtext: '', x:'left' }, tooltip : { trigger: 'item', formatter: '{b}', itemSize:'14px' }, legend: { orient: 'vertical', x:'center', data:['重庆市区县'] }, dataRange: { x: 'left',

echarts合并地图,把中国各个省份分成&#39;华北&#39;,&#39;东北&#39;,&#39;华东&#39;,&#39;华中&#39;,&#39;华南&#39;,&#39;西南&#39;,&#39;西北&#39;七个大区

最近公司有个需求是按照大区,即把中国分成华北','东北','华东','华中','华南','西南','西北'七个大区, 但是echarts地图只有省市,还没有大区,只能自己网上找资料再按需求写了 echarts地图合并关键点是把coordinates和encodeOffsets合并,而且这两个必须都合并,且最多只能合并到二维数组,合并到三维数组就不行了. 实例结果截图 代码: <!DOCTYPE html> <html lang="zh"> <head>

几个不错的echarts +百度地图 案例

https://echarts.baidu.com/examples/editor.html?c=map-polygon https://echarts.baidu.com/examples/editor.html?c=effectScatter-bmap 空气质量等,可以通过值来控制点的大小和光环. https://echarts.baidu.com/examples/editor.html?c=heatmap-bmap 人流密度图.热力图等 我的echarts+百度地图 左上角可以切换地图和

echarts的地图省份颜色自适应变化

在使用echarts的地图的时候省份的颜色可能随着数据的多少显示不同的颜色,但是当后台返回的数据的变化较大时可能就不好控制了,所以需要设置根据后台的数据进行自适应 将后台返回的数据中的value放入一个新的数组中,然后取出数组中的最大值来设置给echarts的visulMap的max属性,并将最小值设置给min属性,当后台没有数据返回的时候会报错,所以要进行一下判断 这里取最大值和最小值使用的是扩展运算符配合Math.max/Math.min来实现的 //data是后台返回的数据var leng

Echarts mc地图

Echarts mc地图 echarts官网实例: https://gallery.echartsjs.com/editor.html?c=xSNlA5O-zl 效果: 代码: <html> <head> <script type="text/javascript" src="jquery.min.js"></script> <script type="text/javascript" src

一个让echarts中国地图包含省市轮廓的技巧

背景知识及应用简介 本文主要介绍一个使用ECharts地图组件的取巧方法,该技巧源于实际需求中遇到的问题,一般没有该需求的话这个技巧也是用不到的.有前端基础和以及对ECharts有了解的人基本可以读懂本文. 可能官方也提供过整体的地图库,但可能个人能力有限,并没有找到相关信息或者其他解决方案,如果知道的园友请告诉我. ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safa

Echarts Map地图类型使用

使用的时候出现了一个BUG, China地图的底色没有绘制出来,现在把一个小的DEMO给大家,以供参考,并附上参考文章(http://blog.csdn.net/danielinbiti/article/details/44851781),祝好. <!DOCTYPE html> <head> <meta charset="utf-8"> <title>ECharts</title> </head> <body

Echarts map地图中需要的JSON 数据格式

var initData1 = [ { "name": "安徽", "value": 244 }, { "name": "北京", "value": 5019 }, { "name": "福建", "value": 120 }, { "name": "甘肃", "value&qu