Cesium实现卫星在轨绕行

这个效果其实网上很多案例了,本来不打算写了,但是做都做了,稍微来说一下吧,代码实测可用!

最后的效果就是这个样子的啦!


就是很简单的一个卫星,放射信号,然后围着轨道转圈圈。

资源网站

首先呢,分享几个网站,尽管大家应该都有,但是还是分享一下子吧。

cesium API 中文网站

3D模型下载

其中这个下载3D模型的网站有很多3D模型,可以根据自己的需要搜索下载使用,尽管大部分是收费的,但是又免费的呀,自己测试或者是玩的话,我觉得够用了,我觉得还不错的呢!

绘制卫星绕轨动效

首先这个稍微说一下哈,其实就是用了 cesium 的时间轴,然后添加卫星模型,在距离地面的固定高度按照设置好的轨迹进行绕地旋转,关于下面的锥形信号覆盖区域,就是在卫星正下方,添加绘制了一个圆柱形的模型,使得上面的圆截面半径为0,下面的圆截面半径大一些,然后就是一个锥形了,具体锥形绘制案例看我 这篇博客【穿梭门】 哈,有好多绘制形状的案例。

接下来直接上代码!!!! 其实我也是看的别的博主发的文章,然后稍作修改出来的效果,但是大体实现方式就是我上面说的。

初始化蓝星

首先要实现这个功能,一定要开启时间轴的呀,不然不好使哈!

timeline: true, //是否显示时间线控件

上面这个得开起来!

    viewer = new Cesium.Viewer('map', {baseLayerPicker: false,  // 影像切换animation: true,  //是否显示动画控件infoBox: false, //是否显示点击要素之后显示的信息geocoder: false, //是否显示地名查找控件timeline: true, //是否显示时间线控件fullscreenButton: false,shouldAnimate: false,navigationHelpButton: false, //是否显示帮助信息控件terrainProvider: new Cesium.createWorldTerrain({requestWaterMask: true,requestVertexNormals: true}),imageryProvider: new Cesium.UrlTemplateImageryProvider({url: "http://mt1.google.cn/vt/lyrs=s&hl=zh-CN&x={x}&y={y}&z={z}&s=Gali"})})

添加卫星模型方法

主要是配置这个时间轴,然后就调用方法把卫星放进蓝星里面。

  // 卫星function satellite() {start = new Cesium.JulianDate.fromDate(new Date());  // 获取当前时间 这不是国内的时间start = Cesium.JulianDate.addHours(start, 8, new Cesium.JulianDate());  // 添加八小时,得到我们东八区的北京时间stop = Cesium.JulianDate.addSeconds(start, 360, new Cesium.JulianDate());  // 设置一个结束时间,意思是360秒之后时间结束viewer.clock.startTime = start.clone();   // 给cesium时间轴设置开始的时间,也就是上边的东八区时间viewer.clock.stopTime = stop.clone();     // 设置cesium时间轴设置结束的时间viewer.clock.currentTime = start.clone(); // 设置cesium时间轴设置当前的时间viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP;  // 时间结束了,再继续重复来一遍//时间变化来控制速度 // 时间速率,数字越大时间过的越快viewer.clock.multiplier = 2;//给时间线设置边界viewer.timeline.zoomTo(start, stop);rrStates = [];getRandState(arrStates, 1);startFunc();}

相关方法

一股脑直接把代码发过来了,然后网上其实都有,我不发你也找得到,然后这些也是网上拼凑起来的,然后嘞,应该能看懂,看不懂的直接找那个 Cesium API 中文版网站去查,应该没什么难的。加油!

function mySatePosition() {this.lon = 0;this.lat = 0;this.hei = 700000;          //卫星高度this.phei = 700000 / 2;     //轨道高度this.time = 0;}function computeCirclularFlight(source, panduan) {var property = new Cesium.SampledPositionProperty();if (panduan == 1) {         //卫星位置for (var i = 0; i < source.length; i++) {var time = Cesium.JulianDate.addSeconds(start, source[i].time, new Cesium.JulianDate);var position = Cesium.Cartesian3.fromDegrees(source[i].lon, source[i].lat, source[i].hei);// 添加位置,和时间对应property.addSample(time, position);}} else if (panduan == 2) {//轨道位置for (var i = 0; i < source.length; i++) {var time = Cesium.JulianDate.addSeconds(start, source[i].time, new Cesium.JulianDate);var position = Cesium.Cartesian3.fromDegrees(source[i].lon, source[i].lat, source[i].phei);// 添加位置,和时间对应property.addSample(time, position);}}return property;}function getRandState(brr, count) {for (var m = 0; m < count; m++) {var arr = [];var t1 = Math.floor(Math.random() * 360);var t2 = Math.floor(Math.random() * 360);for (var i = t1; i <= 360 + t1; i += 30) {var aaa = new mySatePosition();aaa.lon = t2;aaa.lat = i;aaa.time = i - t1;arr.push(aaa);}brr.push(arr);}}function getStatePath(aaa) {var entity_ty1p = computeCirclularFlight(aaa, 2);var entity_ty1 = viewer.entities.add({availability: new Cesium.TimeIntervalCollection([new Cesium.TimeInterval({start: start,stop: stop})]),position: entity_ty1p,   //轨道高度orientation: new Cesium.VelocityOrientationProperty(entity_ty1p),cylinder: {HeightReference: Cesium.HeightReference.CLAMP_TO_GROUND,length: 700000,topRadius: 0,bottomRadius: 900000 / 2,// material: Cesium.Color.RED.withAlpha(.4),// outline: !0,numberOfVerticalLines: 0,// outlineColor: Cesium.Color.RED.withAlpha(.8),material: Cesium.Color.fromBytes(35, 170, 242, 80)},});entity_ty1.position.setInterpolationOptions({interpolationDegree: 5,interpolationAlgorithm: Cesium.LagrangePolynomialApproximation});var entity1p = computeCirclularFlight(aaa, 1);//创建实体var entity1 = viewer.entities.add({// 将实体availability设置为与模拟时间相同的时间间隔。availability: new Cesium.TimeIntervalCollection([new Cesium.TimeInterval({start: start,stop: stop})]),position: entity1p,//计算实体位置属性//基于位置移动自动计算方向.orientation: new Cesium.VelocityOrientationProperty(entity1p),//加载飞机模型model: {uri: './models/weixing/scene.gltf',scale: 1000},//路径path: {resolution: 1,material: new Cesium.PolylineGlowMaterialProperty({glowPower: 0.1,color: Cesium.Color.PINK}),width: 5}});//差值器entity1.position.setInterpolationOptions({interpolationDegree: 5,interpolationAlgorithm: Cesium.LagrangePolynomialApproximation});}function startFunc() {for (var i = 0; i < arrStates.length; i++) {getStatePath(arrStates[i]);}}

Cesium实现卫星在轨绕行相关推荐

  1. Cesium|xt3d卫星正摄动画

    Cesium|xt3d卫星正摄动画 效果 代码 预览地址 效果 代码 <!DOCTYPE html> <html lang="zh-CN"><head ...

  2. Cesium 实现卫星效果

    技术合作交流qq:260148606 更多尽在 webgis.fun 通过两种方式实现了卫星沿着轨道运行,一种是轨道数据根据一定的偏差,动态生成,另外一个种是,根据生成的CZML文件加载. 其实中实现 ...

  3. MATLAB与STK互联47:卫星在轨寿命分析(lifetime)

    当我们设计卫星轨道时,轨道高度不能太低,以避免卫星快速的进入大气层烧毁.那怎么分析卫星在轨寿命呢,STK软件提供了寿命计算功能,本文就对这个功能进行介绍.先手动操作一遍,然后再利用MATLAB与STK ...

  4. Cesium|xt3d 卫星视椎体(四棱锥体)

    Cesium|xt3d 卫星视椎体(四棱锥体) 效果 代码 预览地址 效果 代码 <!DOCTYPE html> <html lang="zh-CN">&l ...

  5. 长光卫星冲刺科创板上市,预计2025年底前实现300颗卫星在轨

    近日,长光卫星技术股份有限公司(下称"长光卫星")在上海证券交易所递交招股书,准备在科创板上市. 本次冲刺科创板上市,长光卫星计划募资26.83亿元,将用于"吉林一号&q ...

  6. Cesium专栏-卫星轨迹

    Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...

  7. cesium绘制卫星

    首先需要注意new Cesium.Viewer的时候需要将 timeline: true,shouldAnimate: true, // 初始时刻运动 两个属性置为true否则不生效 export c ...

  8. [ Cesium ] 根据卫星位置,建立实时动态连线

    实现思路 通过加载 czml 文件,生成卫星 获取卫星实体的位置,建立连线 监听卫星位置,若发生变化,则刷新连线 问题解决 连线动态变化 setInterval() 可以监听每一帧画面 或者说当启动场 ...

  9. 基于Cesium的卫星及空间碎片的轨迹展示

    核心:cesium.czml.satellite.js.tle 下面简单介绍一下操作步骤,并展示部分代码(附上结果截图) 步骤一:初始化cesium const viewer = new Viewer ...

最新文章

  1. R语言非独立多分组非参数检验、Kruskal–Wallis检验进行非独立多分组非参数检验(Nonparametric multiple comparisons)、当ANOVA不满足条件的情况下
  2. chrome插件开发记录(1)——解决问题“清单文件缺失或不可读”
  3. 平民软件OneProxy的强大
  4. Gym - 101246D 博弈
  5. SpringBoot用容器IoC管理Bean
  6. JAVA反射+SOCKET实现远程方法调用
  7. 同一个网站下不同应用程序可以不同Framework版本
  8. jzoj3832-在哪里建酿酒厂【指针】
  9. 《南溪的目标检测学习笔记》——验证模式下出现“Process finished with exit code 137 (interrupted by signal 9: SIGKILL)“的问题
  10. 语音情感识别研究进展综述
  11. Q96:PT(1):方格纹理(Checker)(1)——3D Checker
  12. 什么是CTS、CLS和CLR
  13. 二叉树模型期权定价c语言程序,二叉树期权定价模型
  14. Multitask Learning
  15. Linux(1)- 服务器核心知识、Linux入门、VMware与centeos安装、远程连接linux、linux基本命令使用...
  16. 国际标准战争的技术真相
  17. 客观评价,一起看看iPhone 12是否值得你入手?
  18. 深信服超融合数据通讯口地址冲突报错处理
  19. 搜狗微信反爬虫机制探讨及应对方法
  20. 关于团队合作的一些看法

热门文章

  1. 面部微雕做了以后有危害吗,自体脂肪填充苹果肌硬块多久消,姐姐聚会那些事
  2. 美国PARKER派克永磁高速伺服电机——GVM电机
  3. python习作——简易24点计算器
  4. Salvage Robot[agc-004E]
  5. 宝宝出生前需要准备的用品
  6. 刚生了宝宝后需要及时办理的6个证件
  7. 删除姓名、年龄重复的记录——数据库
  8. Spark数据倾斜解决方案(收藏级)
  9. Android Studio入门(安装--开发调试)
  10. cv2.warpAffine()参数详解