Ceisum实时获取后台数据 实时更新实体位置信息且实现实体转向功能

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

用定时器模拟实时获取后台数据 当取到数据后实体同时移动到目标位置 这种方式不再与Cesium时间关联 

实现效果:每秒新增一个坐标;每秒实体运动到相应正确位置且实现实体转向功能

PS:该方法实体经纬度超过正负180,90时需进行坐标计算转为正负180,90范围内的坐标后实体转向才正常;本文未进行处理

var viewer = new Cesium.Viewer('cesiumContainer', {
    infoBox : false,
    selectionIndicator : false,
    shadows : true,
  sceneMode: 2, // 初始场景模式
    shouldAnimate : true
});
var positions = [];
var poly = undefined;
var entityArr=[];
var PolyLinePrimitive = (function(){
    function _(positions){
        this.options = {
            polyline : {
                show : true,
                positions : [],
                material : Cesium.Color.CORNFLOWERBLUE,
                width : 1,
                arcType : Cesium.ArcType.RHUMB,
            }
        };
        this.positions = positions;
        this._init();
    }
    _.prototype._init = function(){
        var _self = this;
        var _update = function(){
            return _self.positions;
        };
        //实时更新polyline.positions
        this.options.polyline.positions = new Cesium.CallbackProperty(_update,false);
        viewer.entities.add(this.options);
        entityArr.push(this.options);
    };
    return _;
})();
// 模型转向-经纬度求与正北方向的夹角(方向角)
function getAngel(A, B) {
    var dx = (B.m_RadLo - A.m_RadLo) * A.Ed;
    var dy = (B.m_RadLa - A.m_RadLa) * A.Ec;
    var angle = 0.0;
    angle = Math.atan(Math.abs(dx / dy)) * 180. / Math.PI;
    var dLo = B.m_Longitude - A.m_Longitude;
    var dLa = B.m_Latitude - A.m_Latitude;
    if (dLo > 0 && dLa <= 0) {
        angle = (90 - angle) + 90;
    } else if (dLo <= 0 && dLa < 0) {
        angle = angle + 180;
    } else if (dLo < 0 && dLa >= 0) {
        angle = (90 - angle) + 270;
    }
    return angle;
}
function MyLatLng(longitude, latitude) {
    var Rc = 6378137;
    var Rj = 6356725;
    var m_LoDeg, m_LoMin, m_LoSec;
    var m_LaDeg, m_LaMin, m_LaSec;
    var m_Longitude, m_Latitude;
    var m_RadLo, m_RadLa;
    var Ec;
    var Ed;
    m_LoDeg = longitude;
    m_LoMin = Number.parseInt((longitude - m_LoDeg) * 60);
    m_LoSec = (longitude - m_LoDeg - m_LoMin / 60.) * 3600;
    m_LaDeg = latitude;
    m_LaMin = Number.parseInt((latitude - m_LaDeg) * 60);
    m_LaSec = (latitude - m_LaDeg - m_LaMin / 60.) * 3600;
    m_Longitude = longitude;
    m_Latitude = latitude;
    m_RadLo = longitude * Math.PI / 180.;
    m_RadLa = latitude * Math.PI / 180.;
    Ec = Rj + (Rc - Rj) * (90. - m_Latitude) / 90.;
    Ed = Ec * Math.cos(m_RadLa);
    return {
        m_RadLo: m_RadLo,
        m_RadLa: m_RadLa,
        m_Longitude: m_Longitude,
        m_Latitude: m_Lat
cesium 如何使实体平滑更新位置 如果需要不断更新实体位置实现平滑过渡的效果可以借鉴该方式,两种方式实现,一是直接赋值新坐标位置,但有时会出现闪烁情况;这里推荐第二种,通过回调函数的方式更新位置 1 直接赋值方式 直接赋值方式,cesium绘制原理使首先移除,然后在新位置渲染一个一次进行 效果如下 可以看到明显缺点:会有闪烁;表现为无有无有....,如果轮询间隔短,甚至出现消失的效果 import { Viewer, Cartesian3, Color, PolygonHierarchy,... 阅读详情

相关推荐

Cesium 接受websocket数据,并实时展示姿态(无人机监测系统)

最近做了个websocket的数据实时更新项目,通过接受websocket的数据,来实时更新无人机的位置以及姿态。 其中前端的ui用的是layui。 以下是部分效果图: 1、数据推送 2、数据连接: 3、无人机姿态展示: 以上即为一个完整的过程,从数据的发送--接受--实时动态展示。 以下说下代码和部分原理: websocket的连接: 这部分就不说了,就是简单的数据推送的过程。 下面说下三维的原理: data为每次推送过来的数据数组,我会遍历这个数据。 根据..

资深三维GIS开发 7876

Ceisum实时获取后台数据 实时更新实体位置信息

var viewer = new Cesium.Viewer('cesiumContainer', { infoBox : false, selectionIndicator : false, shadows : true, shouldAnimate : true }); var positions = []; var poly = undefined; var entityArr=[]; var PolyLinePrimitive = (function(){ .

yangwq的博客 7448

cesium添加弹窗,跟随实体移动

cesium添加弹窗,并跟随实体移动

weixin_43845059的博客 1115

cesium实时更新数据实现实体运功

var viewer = new Cesium.Viewer('cesiumContainer', { infoBox : false, selectionIndicator : false, shadows : true, shouldAnimate : true }); var czml = [{ "id": "document", "n...

yangwq的博客 7865

Ceisum实时获取后台数据 实时更新实体位置信息,web开发源码

前端CSS面试题文档,JavaScript面试题文档,Vue面试题文档,大厂面试题文档,需要的读者可以戳这里免费领取!并会持续更新!**如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)前端CSS面试题文档,JavaScript面试题文档,Vue面试题文档,大厂面试题文档,需要的读者可以戳这里免费领取![外链图片转存中…(img-KdzbeaSu-1712086247396)][外链图片转存中…(img-ioyBWVEo-1712086247396)]

2401_84097883的博客 778

Cesium基于czml的model模型转向

var czml = [{ "id" : "document", "name" : "CZML Point - Time Dynamic", "version" : "1.0" },{ "id" : "point", "availability" :"2012-08-04T16:00:00Z/2012-08-04T16:05:00Z", "posi...

yangwq的博客 4625

cesium在二维地图中拖拽移动实体

var viewer = new Cesium.Viewer('cesiumContainer',{ sceneMode: 2, }); viewer.entities.add({ id:'id', position : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883), billboard :{ ...

yangwq的博客 3275

Cesium】绘制轨迹问题+实体跳跃问题解决

本文针对后端推送实体位置数据导致前端显示跳跃的问题,提出了两种解决方案:1)使用SamplePositionProperty记录历史位置并自动插值以平滑轨迹;2)引入前端时间轴机制,通过动态调整仿真速度保持与后端数据同步,避免位置跳跃。同时指出新方案带来的终端时间不同步问题。

Gua_guagua的博客 340

Cesium实体更新问题(重新渲染不生效不生效)

针对cesium实体重新渲染不生效时解决办法

qq_33138785的博客 1624

cesium实体移动(折线,圆,多边形带边框)

Cesium.Cartesian3.subtract计算出鼠标移动的笛卡尔分量,再用原本的圆的位置加上这个分量得到新的位置更新到圆的polyline上以及圆心上。同理折线和多边形也是如此。圆的移动就是把圆心赋值为鼠标当前位置,但是实体的outline宽度不生效后我们改用的polyline来代替边框,那么我们要做的就不仅是改变圆心,还有边框的位置同样需要改变。折线以及多边形都是通过改变polyline的数组改变位置。计算两个笛卡尔的分量差。计算两个笛卡尔的分量和。

m0_48353529的博客 2299

Cesium入门简介

Cesium介绍 Ceisum是一款开源的基于JavaScript编写的使用WebGL的3D地图引擎。可用于动态地理空间数据的可视化应用开发,它是一款高性能的3维渲染引擎。 Ceisum的诞生背景 首先介绍一下AGI AGI的英文全称为Analytical Graphics Incorporation,三位创始人曾在通用公司宇航部的供职工程师,提供STK(System/Satellite Tool...

youlinhuanyan的博客 2021

实现cesium 加载地图后延时和瞬间到达某位置

cesium将相机从当前位置移动到新位置

u012425087的博客 891

cesium巡逻获取对象实时信息并实现切换第一人称视角

viewer.clock.onTick.addEventListener对clock增加监听事件;完成思路:飞行巡逻时,监听此对象的实时坐标经纬度等数据,由此数据进行视角的优化调整。viewer.clock.shouldAnimate =true 启动时钟开始转动。

m0_45305745的博客 2242

cesium 实时目标跟踪(连线效果)

【代码】cesium 实时目标跟踪(连线效果)

God's asylum的博客 3114

Mapbox GL JS 根据指定的点在地图上标记一个指定半径(KM)的圆形区域

需求描述: 小明在使用mapbox-gl进行开发时,需要实现用户指定地图上的一个点,然后根据这个点,突出显示以其为中心的一定半径的圆形区域。半径可以为小明指定的千米数。 具体实现点击产生点的功能就不描述了,这里主要描述产生圆形区域的方法。 1. 构造函数:输入中心点经纬度,和半径大小(KM),以及点数。 var createGeoJSONCircle = function(center, rad...

qq_32565543的博客 4852
上一篇: ElementUI el-tabs切换之前判断是否满足切换条件 不满足条件仅提示不切换Tab
下一篇: 1.TypeScript安装及介绍
前端杨小白
博客等级 码龄7年 429粉丝 188原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值