Cesium 实战 - OD 通信线 - 移动连接线

Cesium 实战 - OD 通信线 - 移动连接线

    • OD 通信线 - 移动连接线核心代码
    • 完整代码
    • 在线示例

在项目中,实现完卫星通信线之后,又有一个新需求,需要通信线根据火箭移动而移动,相当于追踪效果,思考之后通过 Entity CallbackProperty 实现。

实际上是通过自定义材质类,通过着色器代码实现

本文包含移动连接线核心代码、完整代码以及在线示例三部分。


OD 通信线 - 移动连接线核心代码


// 获取火箭模型实体
const entity = dataSource.entities.getById("Vulcan");// 模型视角跟随
viewer.trackedEntity = entity;// 设置观察角度
entity.viewFrom = new Cesium.Cartesian3(-1000, 100,-1000);// 添加通信线
viewer.entities.add({polyline: {// 回调更新连接线.positions: new Cesium.CallbackProperty(function (time, result) {const position1 = entity.position.getValue(time);return [position,position1];}, false),width: 5,material: new SatelliteMaterialProperty({color: new Cesium.Color(1.0, 0.0, 1.0, 0.1),speed: 50,count: 10,gradient: 0.2}),},
});

完整代码

<!DOCTYPE html>
<html lang="en">
<head><!-- Use correct character set. --><meta charset="utf-8"/><!-- Tell IE to use the latest, best version. --><meta http-equiv="X-UA-Compatible" content="IE=edge"/><!-- Make the application on mobile take up the full browser screen and disable user scaling. --><metaname="viewport"content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"/><title>Cesium dynamic line</title><script src="http://openlayers.vip/examples/csdn/Cesium.js"></script><script src="./cesium_init.js"></script><script src="http://www.openlayers.vip/examples/resources/jquery-3.5.1.min.js"></script><style>@import url(./Widgets/widgets.css);html,body,#cesiumContainer {width: 100%;height: 100%;margin: 0;padding: 0;overflow: hidden;}</style><script>var _hmt = _hmt || [];(function () {var hm = document.createElement("script");hm.src = "https://hm.baidu.com/hm.js?f80a36f14f8a73bb0f82e0fdbcee3058";var s = document.getElementsByTagName("script")[0];s.parentNode.insertBefore(hm, s);})();</script>
</head>
<body>
<div id="cesiumContainer"></div>
<script>// 创建三维球const viewer = init();// 火箭模拟发射数据const czml = [{"id": "document","name": "SpaceX","version": "1.0","clock": {"interval": "2023-06-14T10:00:00Z/2023-06-14T10:17:33Z","currentTime": "2023-06-14T10:00:00Z","multiplier": 10,"range": "CLAMPED","step": "SYSTEM_CLOCK_MULTIPLIER"}},{"id": "Vulcan","availability": "2023-06-14T10:00:00Z/2023-06-14T10:17:33Z","name": "Vulcan","billboard": {"show": true,"image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAAjSURBVChTYyAa/EcDUGEIgIphAKg0XRSAAFQMDqDChAADAwDC13+BJ+0oDwAAAABJRU5ErkJgggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==","scale": 1,"pixelOffset": {"cartesian2": [0, 0]},"eyeOffset": {"cartesian": [0, 0, 0]},"horizontalOrigin": "CENTER","verticalOrigin": "CENTER","color": [{"interval": "2023-06-14T10:00:00Z/2023-06-14T10:10:00Z","rgba": [0, 255, 0, 255]},{"interval": "2023-06-14T10:10:00Z/2023-06-14T10:13:20Z","rgba": [255, 255, 0, 255]},{"interval": "2023-06-14T10:13:20Z/9999-12-31T23:59:59.9999999Z","rgba": [255, 0, 255, 255]}]},"label": {"show": false,"text": "Vulcan","font": "21pt Lucida Console","style": "FILL_AND_OUTLINE","scale": 0.5,"pixelOffset": {"cartesian2": [5, -4]},"horizontalOrigin": "LEFT","verticalOrigin": "CENTER","fillColor": [{"interval": "2023-06-14T10:00:00Z/2023-06-14T10:10:00Z","rgba": [0, 255, 0, 255]},{"interval": "2023-06-14T10:10:00Z/2023-06-14T10:13:20Z","rgba": [255, 255, 0, 255]},{"interval": "2023-06-14T10:13:20Z/9999-12-31T23:59:59.9999999Z","rgba": [255, 0, 255, 255]}],"outlineColor": {"rgba": [0, 0, 0, 255]},"outlineWidth": 2},"path": {"show": [{"interval": "2023-06-14T10:00:00Z/2023-06-14T10:17:33Z","boolean": true}],"width": 5,"resolution": 1,"leadTime": [{"interval": "2023-06-14T10:00:00Z/2023-06-14T10:17:33Z","epoch": "2023-06-14T10:00:00Z","number": [0, 1053,1053, 0]}],"trailTime": [{"interval": "2023-06-14T10:00:00Z/2023-06-14T10:17:33Z","epoch": "2023-06-14T10:00:00Z","number": [0, 0,1053, 1053]}],"material": {polylineGlow: {color: [{"interval": "2023-06-14T10:00:00Z/2023-06-14T10:10:00Z",rgba: [255, 0, 0, 255],},{"interval": "2023-06-14T10:10:00Z/2023-06-14T10:13:20Z",rgba: [0, 0, 255, 255],},{"interval": "2023-06-14T10:13:20Z/9999-12-31T23:59:59.9999999Z",rgba: [255, 0, 255, 255],}],glowPower: 0.25,// taperPower: 0.5,},},},"model": {"show": true,"gltf": [{"interval": "2023-06-14T10:00:00Z/9999-12-31T23:59:59.9999999Z","uri": "https://cesium.com/public/SandcastleSampleData/launchvehicle.glb"}],"minimumPixelSize": 128,"scale": 3,"runAnimations": false,},"position": {"interpolationAlgorithm": "LAGRANGE","interpolationDegree": 2,"referenceFrame": "FIXED","epoch": "2023-06-14T10:00:00Z","cartesian": [0.000, -2174195.199042614, 4389988.019058515, 4070606.7900844226,250.000, -2828836.74243954, 4527941.384141082, 4322899.592600973,750.000, -3812052.7676919936, 3910960.7948377975, 4168079.0591541207,1053.000, -3929362.40133975, 3277792.786767426, 3795371.463871257,]},"orientation": {"velocityReference": "#position"},},];// 添加火箭车const launchCar = viewer.entities.add({position: Cesium.Cartesian3.fromDegrees(127.69435837574487,38.808381761124146,0.0),model: {uri: "https://openlayers.vip/examples/resources/model/car.glb",scale: 3.0,minimumPixelSize: 128},});const clock = viewer.clock;// 获取当前时刻位置const position = launchCar.position.getValue(clock.currentTime);const dataSourcePromise = viewer.dataSources.add(Cesium.CzmlDataSource.load(czml));dataSourcePromise.then(function (dataSource) {// 获取火箭模型实体const entity = dataSource.entities.getById("Vulcan");// 模型视角跟随viewer.trackedEntity = entity;// 设置观察角度entity.viewFrom = new Cesium.Cartesian3(-1000, 100,-1000);// 添加通信线viewer.entities.add({polyline: {// 回调更新连接线.positions: new Cesium.CallbackProperty(function (time, result) {const position1 = entity.position.getValue(time);return [position,position1];}, false),width: 5,material: new SatelliteMaterialProperty({color: new Cesium.Color(1.0, 0.0, 1.0, 0.1),speed: 50,count: 10,gradient: 0.2}),},});viewer.zoomTo(viewer.entities);}).catch(function (error) {console.error(error);});/*** @description:卫星通信材质* @date: 2023年6月17日10:43:18*/function SatelliteMaterialProperty(options) {// 默认参数设置this._definitionChanged = new Cesium.Event();this.color = options.color;}Object.defineProperties(SatelliteMaterialProperty.prototype, {isConstant: {get: function() {return false;}},definitionChanged: {get: function() {return this._definitionChanged;}},color: Cesium.createPropertyDescriptor('color')});SatelliteMaterialProperty.prototype.getType = function(time) {return 'SatelliteMaterial';};SatelliteMaterialProperty.prototype.getValue = function(time, result) {if (!Cesium.defined(result)) {result = {};}result.color = Cesium.Property.getValueOrClonedDefault(this._color, time, Cesium.Color.WHITE, result.color);viewer.scene.requestRender();return result;};SatelliteMaterialProperty.prototype.equals = function(other) {return this === other ||(other instanceof SatelliteMaterialProperty &&Cesium.Property.equals(this._color, other._color));};Cesium.Material.SatelliteType = 'SatelliteMaterial';Cesium.Material.SatelliteSource = `uniform vec4 color;uniform float speed;uniform float percent;uniform float gradient;uniform float count;czm_material czm_getMaterial(czm_materialInput materialInput){czm_material material = czm_getDefaultMaterial(materialInput);vec2 st = materialInput.st;float t =fract(czm_frameNumber * speed / 1000.0);float v = 1.0-(1.0-smoothstep(gradient,0.0,fract(st.x*count-t)))*0.95;material.diffuse = color.rgb/10.0 + vec3(v)*9.0;material.alpha = color.a;return material;}`;Cesium.Material._materialCache.addMaterial(Cesium.Material.SatelliteType, {fabric: {type: Cesium.Material.SatelliteType,uniforms: {color: new Cesium.Color(1.0, 0.0, 1.0, 0.1),speed: 30.0,gradient: 0.2,count: 15,},source: Cesium.Material.SatelliteSource},translucent: function(material) {return true;}});</script>
</body>
</html>

示例创建小车模型以及火箭发射,模拟小车追踪火箭通信效果。

在这里插入图片描述


在线示例

Cesium OD 通信线 - 移动连接线

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/234589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python可视化系列】一文教会你绘制美观的直方图(理论+源码)

一、引言 前面我详细介绍了如何绘制漂亮的折线图和柱状图&#xff1a; 【Python可视化系列】一文彻底教会你绘制美观的折线图&#xff08;理论源码&#xff09; 【Python可视化系列】一文教会你绘制美观的柱状图&#xff08;理论源码&#xff09; 对于一个连续性的变量&#xf…

中国社科院与新加坡新跃社科联合培养工商管理博士

全球经济正在经历由科技进步与创新、政治和人口的剧烈变化所带来的巨大不确定性与挑战。企业的领导者和管理者需要发展出战略性思维和全球洞察力以便面对越来越大的经济波动。中国社科院与新加坡新跃社科联合培养工商管理博士项目的训练能够让学生在一个企业和组织的改变和发展…

B039-SpringMVC基础

目录 SpringMVC简介复习servletSpringMVC入门导包配置前端控制器编写处理器实现Contoller接口普通类加注解(常用) 路径问题获取参数的方式过滤器简介自定义过滤器配置框架提供的过滤器 springMVC向页面传值的三种方式视图解析器springMVC的转发和重定向 SpringMVC简介 1.Sprin…

澳鹏干货解答!“关于机器学习的十大常见问题”

探索机器学习的常见问题&#xff0c;了解机器学习和人工智能的基本概念、原理、发展趋势、用途、方法和所需的数据要求从而发掘潜在的商机。 什么是机器学习&#xff1f; 机器学习即教授机器如何学习的过程&#xff0c;为机器提供指导&#xff0c;帮助它们自己开发逻辑&#…

SpringBoot-XXLJOB提供动态API调度任务

目录 一、项目版本 二、XXL-JOB提供动态API controller层 service层 三、SpringBoot项目 pom model XxlJobUtil-工具类 XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&…

智能监测/检测系统/摄像头监控系统EasyCVR大华云台控制问题的解决方法

GB28181视频集中存储/云存储/视频监控管理平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、智能分析等。AI智能大数据视频分析EasyCVR平台已经广泛应用在工地、工厂、园…

Java研学-Tomcat服务器

一 Web资源 1 概述 浏览器网页上看到的所有内容都称为web资源&#xff0c;比如文字&#xff0c;图片&#xff0c;音频&#xff0c;视频&#xff0c;链接等等内容。 2 Web资源分类 分类概述使用的技术静态资源静态资源是相对于动态资源而言&#xff0c;是指没有后台数据库、不…

在.NET 应用程序中使用DSN-GBASE南大通用

在.NET 应用程序中使用GBASE南大通用 machine.config 文件中的资源时&#xff0c;首先需在工程中 引用 .NET Framework 的组件GBASE南大通用 System.configuration&#xff0c;然后使用 using 语句将GBASE南大通用System.configuration 命名空间中的类引入到工程中。 1) 在工…

LeetCode:162. 寻找峰值、1901. 寻找峰值 II(二分 C++)

目录 162. 寻找峰值 题目描述&#xff1a; 实现代码与解析&#xff1a; 二分 原理思路&#xff1a; 1901. 寻找峰值 II 题目描述&#xff1a; 实现代码与解析&#xff1a; 二分 原理思路&#xff1a; 162. 寻找峰值 题目描述&#xff1a; 峰值元素是指其值严格大于左…

内网穿透工具frp安装使用

摘要&#xff1a;之前使用的 nps 目前没有维护更新了&#xff0c;和在使用的过程中做内网穿透的的网速应该有限制&#xff0c;不论云服务器带宽是多少&#xff0c;下载速度都比较慢。这里切换到 frp 试试&#xff0c;对安装和使用简单记录&#xff0c;其和 nps 有很大的操作配置…

03-数据结构-栈与队列

1.栈 栈和队列是两种操作受限的线性表。如上图所示显示栈的结构 栈&#xff1a;先进后出&#xff0c;入栈&#xff08;数据进入&#xff09; 和出栈&#xff08;数据出去&#xff09;均在栈顶操作。 常见栈的应用场景包括括号问题的求解&#xff0c;表达式的转换和求值&#…

wvp gb28181 pro 统一编码规则

统一编码规则 D.1 编码规则 A 编码规则 A 由中心编码(8位)、行业编码(2位)、类型编码(3位)和序号(7位)四个码段共20位十 进制数字字符构成,即系统编码 中心编码 行业编码 类型编码 序号。   编码规则 A 的详细说明见表 D.1。其中,中心编码指用户或设备所归属的监控中心的…

Go语言字符串综合指南:函数、方法和最佳实践

Go语言字符串综合指南&#xff1a;函数、方法和最佳实践 引言Go语言字符串基础声明和初始化不可变性字符串长度 字符串操作函数常用字符串操作转换与解析示例连接分割包含关系替换大小写转换整数与字符串的转换字符串到整数的转换格式化与解析 字符串与字符切片字符串和字符切片…

create-react-app 打包去掉 map文件

前言&#xff1a; 在使用 create-react-app 创建的React应用中&#xff0c;默认情况下会生成带有.map文件的打包文件&#xff0c;这些.map文件包含了源代码和调试信息&#xff0c;用于开发和调试过程中进行错误跟踪。然而&#xff0c;在生产环境中&#xff0c;这些.map文件通常…

SQL学习笔记+MySQL+SQLyog工具教程

文章目录 1、前言2、SQL基本语言及其操作2.1、CREATE TABLE – 创建表2.2、DROP TABLE – 删除表2.3、INSERT – 插入数据2.4、SELECT – 查询数据2.5、SELECTDISTINCT – 去除重复值后查询数据2.6、SELECTWHERE – 条件过滤2.7、AND & OR – 运算符2.8、ORDER BY – 排序2…

SAP 采购订单暂存 EKKO-MEMORY 做标识

ME21N创建采购订单的时候可以点击 暂存 按钮保存订单 ME22N进去修改的时候会提示这个订单是暂存的 在表EKKO里字段 MEMORY 打上了标识则标识这个是暂存的 MEMORYTYPE 字段则记录了暂存的状态

理解pom.xml中的parent标签

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 循序渐进学SpringBoot ✨特色专栏&…

【TI毫米波雷达】上电时序、串口回环BUG及SOP模式不正常工作的解决方案(LP87524电源PMIC芯片的BUCK供电时序配置)

【TI毫米波雷达】雷达上电时序及SOP模式不正常工作的解决方案&#xff08;LP87524电源PMIC芯片的BUCK供电时序配置&#xff09; 文章目录 上电时序上电以后的雷达串口回环问题延迟上电时序LP87524电源PMIC芯片的BUCK供电时序LP87524电源PMIC芯片的BUCK默认供电输出附录&#x…

w3af安装(处理python2和3,pip2和3混乱的问题)

git clone --depth 1 https://github.com/andresriancho/w3af.git cd w3af ./w3af_gui报错 打开w3af_gui看一下 要求必须是python2 但我的/usr/bin/env中的python是python3 我们将/usr/bin/env中的python换成python2 which python2 #/usr/bin/python2rm /usr/bin/pythonsud…

探索数据宇宙之飞船 -- python进阶函数numpy

导读&#xff1a;NumPy以其强大的多维数组对象和广泛的数学函数库著称。这些特性使得NumPy成为不仅在学术研究&#xff0c;也在工业界广泛应用的工具。无论是机器学习算法的开发、数据分析、还是复杂的数学模型的构建&#xff0c;NumPy都扮演着举足轻重的角色。 目录 Numpy简…