当前位置:   article > 正文

Cesium闪烁点效果Cesium.CallbackProperty(预警效果,可控制闪烁频率)_new cesium.callbackproperty

new cesium.callbackproperty

最近在做的cesium项目遇到了扫描效果(雷达图,实现过程我博客里又可以去找)现在又遇到了闪烁效果(一个点闪烁),今天总结一下实现过成。

一、需求及效果

需求就是有报警就在地图上标注闪烁点。我的做法是用entity来实现变换不同的颜色

不同颜色闪烁

二、实现代码

关键代码就是利用 Cesium.CallbackProperty这个函数实现(不光闪烁点,闪烁多变应,立方体都可以只要是entity支持的)

  1. var entity = viewer.entities.add({
  2. point: {
  3. show: pointShow,
  4. pixelSize: 35,
  5. color: new Cesium.CallbackProperty(function color() {//关键代码
  6. return Cesium.Color.fromRandom({
  7. minimumRed: 0.76,
  8. minimumGreen: 0.78,
  9. minimumBlue: 0.75,
  10. alpha: 1.0
  11. });
  12. }, false),
  13. heightReference:25000,
  14. },
  15. position: Cesium.Cartesian3.fromDegrees(Number(lonlat[0]),Number(lonlat[1])),//经纬度
  16. label: {//可以在点得旁边显示字
  17. text: text,
  18. scale: 0.8,
  19. fillColor: Cesium.Color.YELLOW,
  20. heightReference: 25000,
  21. verticalOrigin: Cesium.VerticalOrigin.LEFT,
  22. horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
  23. //pixelOffset: new Cesium.Cartesian2(10, 20)
  24. },
  25. show: true
  26. });

下面这个是两种颜色闪烁,且间隔时间长一些(我还没找到随意设置闪烁间隔时间的方法,如果谁有话请在评论区留言告知)txf%几就是间隔几秒变换颜色,比如10s就写txf%10==0;(这个方法亲测是没问题的,根据时间来变换)

  1. color: new Cesium.CallbackProperty(function colorChange(time, result) {
  2. var txf = Math.floor(time.secondsOfDay);
  3. var result = ""
  4. if (txf % 2 ==0) {//间隔两秒变换
  5. result = Cesium.Color.RED;
  6. } else {
  7. result = Cesium.Color.BLUE;
  8. }
  9. return result;
  10. }, false),
  11. //var txf = Math.floor(time.secondsOfDay);
  12. //var result ="";
  13. //if (txf%3==0) {//txf%几就是间隔几秒变换颜色(比如想要间隔10s则txf%10==0)
  14. // result = Cesium.Color.BLUE;
  15. //} else {
  16. // result = Cesium.Color.RED;
  17. //
  18. // }
  19. //return result;

下面是可以控制闪烁频率的方法(根据x值大小来改变频率)(如果有更好的方法可评论告知我)

  1. var x = 3;//控制频率改变x大小越大闪烁间隔越大
  2. var ha = true; //控制颜色变换的开关
  3. var circleColor = Cesium.Color.RED; // 圆圈颜色
  4. var entity = viewer.entities.add({
  5. point: {
  6. show: pointShow,
  7. pixelSize: 35,
  8. color: new Cesium.CallbackProperty(function colorChange(time, result) {
  9. if (ha) {
  10. x -= 0.2;
  11. if (x <= 0) {
  12. ha = false;
  13. circleColor = Cesium.Color.BLUE;
  14. }
  15. } else {
  16. x += 0.2;
  17. if (x >= 3) {//这里也要改动
  18. ha = true;
  19. circleColor = Cesium.Color.RED;
  20. }
  21. }
  22. return circleColor;
  23. }, false),
  24. heightReference: Cesium.HeightReference.RELATIVE_TO_GROUND,
  25. },
  26. position: Cesium.Cartesian3.fromDegrees(Number(lonlat[0]), Number(lonlat[1]), Number(lonlat[2])),
  27. label: {
  28. text: text,
  29. scale: 0.8,
  30. fillColor: Cesium.Color.YELLOW,
  31. verticalOrigin: Cesium.VerticalOrigin.LEFT,
  32. horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
  33. heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
  34. //pixelOffset: new Cesium.Cartesian2(10, 20)
  35. },
  36. show: true
  37. });

具体属性可以看callbackProperty中文文档

三、遇到得坑

当有高程或者地形数据的时候entity得label,point会被遮挡显示不全

viewer.scene.globe.depthTestAgainstTerrain = false;//解决地形遮挡entity问题

这里我给大家推荐一个cesium中文文档对于英文不好的可以看这个cesium中文文档当然也可以看官方文档。

我再推荐一个cesium初学者可以看的网站(我也是初学,我觉得很不错)cesium中文网

动态纹理鹰眼图实现可看

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/990345
推荐阅读
  

闽ICP备14008679号