【AntDesignPro】L7Plot地理可视化组件的使用
CrazyPanda发表于:2023-12-14 11:15:22浏览:657次
L7Plot介绍
L7Plot 基于 L7 实现的开箱即用地理空间数据可视化图表库
L7Plot 专注于地理可视化图表。
以声明配置式的方式,降低用户使用成本;
以常见地理图表分类的方式,降低用户选择成本;
内部集成全国行政区域数据,降低用户使用地理数据心智;
支持多图层及多图表层叠,方便用户定制复杂的业务场景;
L7Plot 专注于地理数据可视化展示,不会涉及数据编辑能力。
前言
项目需要,使用antdesignpro做前端,并绘制可视化大屏,回执地图组件,于是使用了L7Plot。
功能目的
绘制地图,并标记坐标点,鼠标指向坐标时,显示坐标点信息。
参考官网:https://ant-design-charts.antgroup.com/
经过多番试用,最终选择了高级图表来实现此功能https://l7plot.antv.antgroup.com/api/advanced-plot
1、定义接口
export async function organizationCount(body?: { [key: string]: any }, options?: { [key: string]: any }) { return request<API.RequestResult>(host + '/base/count/organization_count', { method: 'POST', credentials: 'include', data: body, ...(options || {}), }); }
后台tp框架,接口
public function organization_count() { $list = Db::name('data_organization')->where("location != ''")->field("id,name,address,location")->select(); $count2 = Db::name('system_user')->where(['usertype'=>2,'is_deleted'=>0])->field("oid,count(id) as count")->group('oid')->select(); foreach ($list as $vo) { $location = explode(',',$vo['location']); $user_count = 0; foreach ($count2 as $k2 => $v2) { if ($v2['oid'] == $vo['id']) { $user_count = round($v2['count']); } } $res[] = [ 'lng' => round($location[0],6),//坐标 'lat' => round($location[1],6),//坐标 'depth' => 10, 'mag' => 5,//气泡大小 'name' => $vo['name'],//tooltip显示 'address' => $vo['address'],//tooltip显示 'user_count' => $user_count,//tooltip显示 ]; } $this->success('成功',$res); }
2、引入组件
import { organizationCount } from '@/services/ant-design-pro/countApi'; import { L7Plot } from '@antv/l7plot'; import { useEffect } from 'react'; import styles from '../style.less';
3、绘制地图
此处我选择的是高德地图amap。
缩放级别,此处我选择级别4
地图样式,此处我选择dark,此处有些问题,我选择的dark原先是生效的,过了段时间后不生效了,可能是版本更新问题吧,由于已经做好,就没有在修改版本,自己写了个css样式,将本经修改掉了
地图如层配置:
type: 'choropleth',
地图需要显示省级,我这里是河南省,并写上邮政编码
viewLevel: { level: 'province', adcode: '410000', },
此处需要与数据来源配置相匹配
source: { data: [], joinBy: { sourceField: 'code', geoField: 'adcode', }, },
设置地图颜色
color: '#1890FF',
其它的按照官网示例配置就可以,有需要的可自行调整。
已上地图层已经配置好了,接下来配置坐标点气泡。
4、绘制气泡层
type: 'dot',
配置数据源
source: { data: res?.data, parser: { type: 'json', x: 'lng', y: 'lat' }, },
配置动效
animate: { enable: true, speed: 0.3, rings: 3, },
配置气泡颜色大小
color: { field: 'mag', value: ['blue'], scale: { type: 'quantile', range: [20, 50] }, }, size: { field: 'mag', value: ({ mag }) => mag * 10, },
配置弹出层tooltip数据及样式,样式是地图成型后自己一点一点修改的(辛苦)
tooltip: { items: [ { field: 'name', alias: '机构名称:' }, { field: 'address', alias: '机构地址:' }, { field: 'user_count', alias: '教师数量:' }, ], domStyles: { 'l7plot-tooltip': { backgroundColor: 'rgba(17, 4, 64, 0.8)', backgroundSize: '100% 100%', border: '2px #0174f5 solid', borderRadius: '10px', cursor: 'pointer', width: '240px', position: 'relative', left: 16, bottom: 16, }, 'l7plot-tooltip__list': { background: 'none' }, 'l7plot-tooltip__list-item': { whiteSpace: 'normal', wordBreak: 'break-word', }, 'l7plot-tooltip__name': { color: '#ddd',textAlign:'left' }, 'l7plot-tooltip__value': { color: '#ddd',textAlign:'right' }, }, showComponent: true, },
最后,完整代码
import { organizationCount } from '@/services/ant-design-pro/countApi'; import { L7Plot } from '@antv/l7plot'; import { useEffect } from 'react'; import styles from '../style.less'; const OrganizationModal = () => { const initMap = () => { organizationCount().then((res) => { new L7Plot('container', { map: { type: 'amap', style: 'dark', center: [113.753094, 34.767052], zoom: 4, pitch: 0, }, plots: [ { type: 'choropleth', zIndex: 1, source: { data: [], joinBy: { sourceField: 'code', geoField: 'adcode', }, }, viewLevel: { level: 'province', adcode: '410000', }, autoFit: true, color: '#1890FF', style: { opacity: 1, stroke: '#F2F7F7', lineWidth: 0.6, lineOpacity: 0.8, }, label: { visible: true, field: 'name', style: { fill: '#000', opacity: 0.8, fontSize: 10, stroke: '#f0f0f0', strokeWidth: 2, textAllowOverlap: false, padding: [5, 5], textOffset: [0, 40], }, }, }, { type: 'dot', zIndex: 2, source: { data: res?.data, parser: { type: 'json', x: 'lng', y: 'lat' }, }, color: { field: 'mag', value: ['blue'], scale: { type: 'quantile', range: [20, 50] }, }, size: { field: 'mag', value: ({ mag }) => mag * 1.5, }, animate: { enable: false, }, }, { type: 'dot', zIndex: 3, source: { data: res?.data, parser: { type: 'json', x: 'lng', y: 'lat' }, }, color: { field: 'mag', value: ['blue'], scale: { type: 'quantile', range: [20, 50] }, }, size: { field: 'mag', value: ({ mag }) => mag * 10, }, style: { opacity: 1, stroke: '#fff', strokeWidth: 1, }, state: { active: true }, animate: { enable: true, speed: 0.3, rings: 3, }, tooltip: { items: [ { field: 'name', alias: '机构名称:' }, { field: 'address', alias: '机构地址:' }, { field: 'user_count', alias: '教师数量:' }, ], domStyles: { 'l7plot-tooltip': { backgroundColor: 'rgba(17, 4, 64, 0.8)', backgroundSize: '100% 100%', border: '2px #0174f5 solid', borderRadius: '10px', cursor: 'pointer', width: '240px', position: 'relative', left: 16, bottom: 16, }, 'l7plot-tooltip__list': { background: 'none' }, 'l7plot-tooltip__list-item': { whiteSpace: 'normal', wordBreak: 'break-word', }, 'l7plot-tooltip__name': { color: '#ddd',textAlign:'left' }, 'l7plot-tooltip__value': { color: '#ddd',textAlign:'right' }, }, showComponent: true, }, }, ], layers: [], }); }); }; useEffect(() => { initMap(); }, []); return ( <div className={styles.modal} style={{ height: '100%' }}> <div className={styles.modal2}> <div className={styles.modalContent} style={{ padding: 2 }}> <div id="container" style={{ width: '100%', height: '100%', overflow: 'hidden' }}></div> </div> </div> </div> ); }; export default OrganizationModal;
在页面引入此组件即可
<Row gutter={24} style={{ textAlign: 'center' }}> <Col xl={{ span: 24 }} style={{ height: '60vh' }}> <OrganizationModal /> </Col> </Row>
最终效果
猜你喜欢
- 【AntDesignPro】Ant Design Pro学习记录—ProTable的使用(三)
- 一、 自定义检索条件部分列表页需要做一些简单的数据汇总统计,并能够跟随检索条件自动变化,protable自带的功能没有找到对应的实现方法,最后决定自己来实现这个功能。1、关闭ProTable自带检索功能search={false}2、自定义检索表单在ProTable上方加入自定义表单<Card bordered={false} style={{ marginBottom: 15 }}>
- 【AntDesignPro】使用高德地图设置考勤区域
- 参考高德开放平台https://lbs.amap.com/api/javascript-api-v2/guide/abc/amap-react功能要求:使用AntDesignPro开发系统管理端,考勤模块需要设置APP考勤打卡区域,需要页面显示地图定位并设置考勤范围(地图上画圈),以便APP在画圈范围内打卡使用。1、 准备2、 下载react类组件代码参考官网流程,可正常加载出地图组件,下面是我的页面和组件文件组件文件3、 安装并引入AmAP Loadernpm i @ama
- 【AntDesignPro】Ant Design Pro学习记录—前后端分离跨域设置,解决跨域session不一致
- 目录前言一、为什么跨域二、跨域配置三、跨域请求session不一致前言第一次做前后端分离,也是踩了很多坑,记录一下AntDesignPro跨域解决的方式。服务器系统使用Nginx,服务端使用thinkphp6。AntDesignPro正式build放到服务器上后,提示登录成功,但一直登录不上,后来发现是跨域session不同导致的,登录的时候session和登录成功后session的id不同,导致提示登录成功,就是登录不进去的情况。一、为什么跨域不想知道为什么要跨域,只想知道怎么解决。二、跨域配
- 【React】 react 绘制矩形
- 在React中绘制矩形,可以使用HTML5的<canvas>元素结合React组件的生命周期方法来实现。以下是一个简单的React组件示例,用于绘制矩形:import React, { Component } from 'react'; class Rectangle extends Component { componentDid
- 【AntDesignPro】Ant Design Pro学习记录—ProTable的使用(一)
- 目录一、关于ProTable二、使用步骤1.新建页面2.修改接口3.接口调用4.数据显示和检索1)不同类型内容显示2)列表检索3)列表内容样式设置5.其它1)render的简单使用2)图片点击预览3)翻页总结前言因为项目需要,确定了Ant Design Pro框架来开发后台管理端,刚接触这套框架,而且配套的资料真的很少,只能基于官方demo和网上不完整的学习经验一次次尝试,终于有个像样的结果,记录一下研究学习的成果,也给需要的同学一些帮助。本次学习研究基于Ant Design Pro V5版本,
- 【React】前端框架 React 学习总结
- 目录一、React在HTML里的运用二、React框架的常用操作项目打包1、JSX基础语法规则2、state数据的使用3、生命周期4、数据的双向绑定与Ref5、PropTypes验证规则6、React里的插槽7、错误边界8、直接操作refs元素9、高阶组件的运用案例10、性能优化11、Hook生命周期钩子的使用12、React里的计算属性三、组件之间的传值1、父子组件之间传值2、子向父传值3、context实现跨层级通信context hook案例四、网络请求框架使用五、React路由的使用声明
- 【AntDesignPro】Ant Design Pro学习记录—播放视频和音频
- 在ant design pro中,使用video和audio标签播放视频和音频1、播放视频我使用ModalForm弹框显示,autoPlay设置是否自动播放,controls设置操作按钮是否显示,设置好宽度和高度即可src是配置视频文件的链接<ModalForm title="播放视频" &n
- 【AntDesignPro】Ant Design Pro学习记录—ProTable的使用(二)
- 目录一、列表检索初始值设置二、字段缩略显示一、列表检索初始值设置使用initialValue属性,配置列表检索的初始值const columns: ProColumns<API.RoomItem>[] = [ { title: '名称', &nb
栏目分类全部>