import { Fragment, useState } from "react"; import { Entity, EllipsoidGraphics, useCesium, PolylineGraphics, LabelGraphics, } from "resium"; import { useInterval, useThrottleFn } from "ahooks"; import { useDispatch } from "react-redux"; import { Cartesian3, Color, Math as CesiumMath, LabelStyle, PolylineDashMaterialProperty, Cartesian2, } from "cesium"; const lowCircle = ( ); const highCircle = ( ); // const labelText={ // '5月南极涛动','Rossby波列' , '印度洋海温异常(信号存储)', '6月青藏高原降水(80个站点)和加热' // } function Circles() { const { viewer } = useCesium(); const dispatch = useDispatch(); const { run: showInfo } = useThrottleFn( () => { dispatch.data.updateImageLayer({ indianOcean: true }); dispatch.data.update({ showSite: true }); }, { wait: 1000, } ); const { run: closeInfo } = useThrottleFn( () => { dispatch.data.updateImageLayer({ indianOcean: false }); dispatch.data.update({ showSite: false }); }, { wait: 1000, } ); const Circle = ({ id, lon, lat, isLow, showTime }) => { const circle = isLow ? lowCircle : highCircle; const [show, setShow] = useState(false); useInterval(() => { const { startTime, currentTime, shouldAnimate } = viewer.clock; const _time = Math.floor( currentTime.secondsOfDay - startTime.secondsOfDay ); if (!shouldAnimate) return; if (_time === 20) { showInfo(); } else if (_time === 0) { closeInfo(); } if (_time >= showTime) { setShow(true); } else { if (!show) return; setShow(false); } }, 300); if (!show) return <>; return ( {circle} {circle} ); }; return ( ); } export default Circles;