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;