2023-09-18 18:08:10 +08:00

129 lines
3.0 KiB
JavaScript

import { Fragment } from "react";
import { Entity, EllipseGraphics } from "resium";
import wave from "@/assets/wave.png";
function WavePoint({
stationLon,
stationLat,
value = 360,
deviationR = 5000,
eachInterval = 1500,
maxR = 3600 * 100,
}) {
const data = {
stationLon, //经度
stationLat, //纬度
value, //传感器的大小
deviationR, //差值 差值也大 速度越快
eachInterval, //两个圈的时间间隔
imageUrl: wave,
maxR,
};
var r1 = 0,
r2 = 0;
var r3 = 0,
r4 = 0;
function changeOne() {
r1 = r1 + data.deviationR;
if (r1 >= data.maxR) {
r1 = 0;
}
return r1;
}
function changeR2() {
r2 = r2 + data.deviationR;
if (r2 >= data.maxR) {
r2 = 0;
}
return r2;
}
const point1 = (
<Entity
id={`wave-point-1-${stationLon}-${stationLat}`}
position={Cesium.Cartesian3.fromDegrees(
data.stationLon,
data.stationLat,
0
)}
show={true}
>
<EllipseGraphics
semiMinorAxis={new Cesium.CallbackProperty(changeOne, false)}
semiMajorAxis={new Cesium.CallbackProperty(changeR2, false)}
height={10}
material={
new Cesium.ImageMaterialProperty({
image: data.imageUrl,
repeat: Cesium.Cartesian2(1.0, 1.0),
transparent: true,
color: new Cesium.CallbackProperty(function () {
var alp = 1 - r1 / data.maxR;
return Cesium.Color.WHITE.withAlpha(alp);
}, false),
})
}
/>
</Entity>
);
let point2;
//第二个圆开始跑
setTimeout(function () {
function changeTwo() {
r3 = r3 + data.deviationR;
if (r3 >= data.maxR) {
r3 = 0;
}
return r3;
}
function changeR12() {
r4 = r4 + data.deviationR;
if (r4 >= data.maxR) {
r4 = 0;
}
return r4;
}
point2 = (
<Entity
position={Cesium.Cartesian3.fromDegrees(
data.stationLon,
data.stationLat,
0
)}
show={true}
id={`wave-point-2-${stationLon}-${stationLat}`}
>
<EllipseGraphics
semiMinorAxis={new Cesium.CallbackProperty(changeTwo, false)}
semiMajorAxis={new Cesium.CallbackProperty(changeR12, false)}
height={10}
material={
new Cesium.ImageMaterialProperty({
image: data.imageUrl,
repeat: Cesium.Cartesian2(1.0, 1.0),
transparent: true,
color: new Cesium.CallbackProperty(function () {
var alp = 1 - r1 / data.maxR;
return Cesium.Color.WHITE.withAlpha(alp);
//entity的颜色透明 并不影响材质,并且 entity也会透明
}, false),
})
}
/>
</Entity>
);
}, data.eachInterval);
return (
<Fragment>
{point1}
{point2}
</Fragment>
);
}
export default WavePoint;