import { LayerEvent, LineLayer, MapboxScene, Marker, PointLayer, PolygonLayer, Popup, } from '@antv/l7-react'; import * as React from 'react'; function joinData(geodata: any, ncovData: any) { const ncovDataObj: any = {}; ncovData.forEach((item: any) => { const { countryName, countryEnglishName, currentConfirmedCount, confirmedCount, suspectedCount, curedCount, deadCount, } = item; if (countryName === '中国') { if (!ncovDataObj[countryName]) { ncovDataObj[countryName] = { countryName: 0, countryEnglishName, currentConfirmedCount: 0, confirmedCount: 0, suspectedCount: 0, curedCount: 0, deadCount: 0, }; } else { ncovDataObj[countryName].currentConfirmedCount += currentConfirmedCount; ncovDataObj[countryName].confirmedCount += confirmedCount; ncovDataObj[countryName].suspectedCount += suspectedCount; ncovDataObj[countryName].curedCount += curedCount; ncovDataObj[countryName].deadCount += deadCount; } } else { ncovDataObj[countryName] = { countryName, countryEnglishName, currentConfirmedCount, confirmedCount, suspectedCount, curedCount, deadCount, }; } }); const geoObj: any = {}; geodata.features.forEach((feature: any) => { const { name } = feature.properties; geoObj[name] = feature.properties; const ncov = ncovDataObj[name] || {}; feature.properties = { ...feature.properties, ...ncov, }; }); return geodata; } export default React.memo(function Map() { const [data, setData] = React.useState(); const [filldata, setfillData] = React.useState(); const [popupInfo, setPopupInfo] = React.useState<{ lnglat: number[]; feature: any; }>(); React.useEffect(() => { const fetchData = async () => { const [geoData, ncovData] = await Promise.all([ fetch( 'https://gw.alipayobjects.com/os/bmw-prod/36741c60-5e69-4c36-9033-d4ce42754a78.json', ).then((d) => d.json()), fetch('https://lab.isaaclin.cn/nCoV/api/area?latest=1').then((d) => d.json(), ), ]); const worldData = joinData(geoData, ncovData.results); const pointdata = worldData.features.map((feature: any) => { return feature.properties; }); setfillData(worldData); setData(pointdata); }; fetchData(); }, []); function showPopup(args: any): void { setPopupInfo({ lnglat: args.lngLat, feature: args.feature, }); } return ( <> {popupInfo && ( {popupInfo.feature.name} )} {data && [ , , { return count > 10000 ? '#b10026' : count > 1000 ? '#e31a1c' : count > 500 ? '#fc4e2a' : count > 100 ? '#fd8d3c' : count > 10 ? '#feb24c' : count > 1 ? '#fed976' : 'rgb(255,255,255)'; }, }} shape={{ values: 'circle', }} active={{ option: { color: '#0c2c84', }, }} size={{ field: 'confirmedCount', values: [0, 30], }} style={{ opacity: 0.6, }} > , ]} ); });