map/src/components/Guide/Guide.tsx
2023-10-16 21:48:16 +08:00

158 lines
4.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { Layout, Row, Col, Select } from 'antd';
import React, { useEffect, useState } from 'react';
import styles from './Guide.less';
import { getDashboardData } from '../../api';
import { GaodeMap ,Scene } from '@antv/l7';
import { Choropleth } from '@antv/l7plot';
import areaList from '../../assets/localData/area-list.json'
interface Props {
name: string;
}
// 脚手架示例组件
const Guide: React.FC<Props> = (props) => {
const { name } = props;
const [registerDays, setRegisterDays] = useState(0);
const [createLayerCount, setCreateLayerCount] = useState(0);
const [createPointCount, setCreatePointCount] = useState(0);
useEffect(() => {debugger
const scene = new Scene({
id: 'map',
map: new GaodeMap({
// pitch: 20,
style: 'light',
center: [ 120, 20 ],
zoom: 3
})
});
scene.on('loaded', () => {
const data = areaList
// .filter(({ level, parent }) => level === 'city' && parent === 330000)
.map((item) => ({ ...item, value: Math.random() * 5000 }));
const choropleth = new Choropleth({
source: {
data,
joinBy: {
sourceField: 'adcode',
geoField: 'adcode',
},
},
viewLevel: {
level: 'country',
adcode: 100000,
},
autoFit: true,
color: {
field: 'value',
value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'],
scale: { type: 'quantize' },
},
style: {
opacity: 1,
stroke: '#ccc',
lineWidth: 0.6,
lineOpacity: 1,
},
label: {
visible: true,
field: 'name',
style: {
fill: '#000',
opacity: 0.8,
fontSize: 10,
stroke: '#fff',
strokeWidth: 1.5,
textAllowOverlap: false,
padding: [5, 5],
},
},
state: {
active: { stroke: 'white', lineWidth: 1 },
},
tooltip: {
items: ['name', 'adcode', 'value'],
},
zoom: {
position: 'bottomright',
},
legend: {
position: 'bottomleft',
},
drill: {
steps: ['province', 'city', 'district'],
},
});
choropleth.addToScene(scene);
});
//大盘统计数据
getDashboardData().then((e) => {
const data = e.data || {};
data.registerDays && setRegisterDays(data.registerDays);
data.createLayerCount && setCreateLayerCount(data.createLayerCount);
data.createPointCount && setCreatePointCount(data.createPointCount);
});
}, []);
let onLayerSelectChange = (e:any) => {
console.log(e);
}
return (
<Layout>
{/* <Row>
<Typography.Title level={3} className={styles.title}>
欢迎使用 <strong>{name}</strong>
</Typography.Title>
</Row> */}
{/* 顶部信息 */}
<div className={styles.homepageMsg}>
<div className={styles.homepageMsgItem}><span className={styles.homepageMsgItemSpan}>{registerDays}</span></div>
<div className={styles.homepageMsgItem}><span className={styles.homepageMsgItemSpan}>{createLayerCount}</span></div>
<div className={styles.homepageMsgItem}><span className={styles.homepageMsgItemSpan}>{createPointCount}</span></div>
</div>
{/* 下拉框 全国自定义点位数目图 */}
<Row className={styles.filterWrap}>
<Col span={5} className={styles.filterLabel}></Col>
<Col span={6}>
<Select
style = {{width: 310, color: '#2F66F2'}}
onChange = {onLayerSelectChange}
placeholder='全部自定义图层'
options = {[
{
value: 'jack',
label: 'Jack',
},
{
value: 'lucy',
label: 'Lucy',
},
]}
></Select>
</Col>
</Row>
{/* 地图 */}
<div className={styles.homepageCircleOut}>
<div className={styles.homepageCircleIn}>
<div id='map' className={styles.map}></div>
</div>
</div>
</Layout>
);
};
export default Guide;