cesium传感器和大量线问题记录

1:场景图初始加载大量轨道线。

  // 创建几何体实例const geometry = new Cesium.PolylineGeometry({positions: positions,width: 1.0, // 轨道线的宽度});const geometryInstance = new Cesium.GeometryInstance({id: res.id,geometry: geometry,});// 创建材质实例const material = new Cesium.Material({fabric: {type: 'Color',uniforms: {color: new Cesium.Color.fromCssColorString(color),},},});// 创建 primitiveres.primitive = new Cesium.Primitive({geometryInstances: geometryInstance,appearance: new Cesium.PolylineMaterialAppearance({material: material,translucent: false,}),asynchronous: false,});if (res.diagramElementId) {window.pointIdMap.set(res.primitive, {elementId: res.diagramElementId,id: res.id,});}// 添加 primitive 到视图器window.viewer.scene.primitives.add(res.primitive);

2:场景图初始加载大量点。

  _labelEntity.point = {color: new Cesium.Color.fromCssColorString(res.localStyle.nameColor),pixelSize: 10,outlineColor: new Cesium.Color.fromCssColorString(res.localStyle.nameColor),outlineWidth: 0,show: point,};_labelEntity.model = {uri: res.localStyle.pathIcon,scale: 1.0,minimumPixelSize: 32,maximumPixelSize: 228,show: true,};_labelEntity.billboard = {image: res.localStyle.icon,show: point, // defaultpixelOffset: new Cesium.Cartesian2(0, 0), // default: (0, 0)eyeOffset: new Cesium.Cartesian3(0.0, 0.0, 0.0), // defaultverticalOrigin: Cesium.VerticalOrigin.CENTER, // default: CENTERscale: 1.0, // default: 1.0width: 100, // default: undefinedheight: 25, // default: undefined};_labelEntity.label = {show: true,text: orbitItem.name,font: '12px Lucida Console',fillColor: new Cesium.Color.fromCssColorString(res.localStyle.nameColor),style: Cesium.LabelStyle.FILL_AND_OUTLINE,pixelOffset: new Cesium.Cartesian2(6, -4),horizontalOrigin: Cesium.HorizontalOrigin.LEFT,verticalOrigin: Cesium.VerticalOrigin.CENTER,};window.viewer.entities.add(_labelEntity);

3:拼接czml文件。

 czmlData.push({id: 'document',name: 'simple',version: '1.0',clock: {interval: time,currentTime: startTime,multiplier: 1,range: 'LOOP_STOP',// CLAMPED:达到终止时间后停止// LOOP_STOP:达到终止时间后重新循环// UNBOUNDED:达到终止时间后继续读秒(默认)step: 'SYSTEM_CLOCK_MULTIPLIER',},});const modelData: any = {id: id,name: localStyle.name,availability: time,ellipse: { height: dataKey },position: {interpolationAlgorithm: 'LAGRANGE',interpolationDegree: interpolationDegree,// referenceFrame: 'FIXED',// referenceFrame: 'INERTIAL',referenceFrame: referenceFrame,epoch: startTime,// cartesian: positions,cartographicDegrees: positions,},billboard: {eyeOffset: {cartesian: [0, 0, 0],},horizontalOrigin: 'CENTER',image: localStyle.icon,width: 100, // default: undefinedheight: 25,pixelOffset: {cartesian2: [0, 0],},scale: 1,show: isIcon,verticalOrigin: 'CENTER',},point: {color: {rgba: weixin,},outlineWidth: 0,pixelSize: 10,show: isPoint,},path: {show: gisMapInfo.checked.AllOrbit,width: 1,material: {solidColor: {color: {rgba: track,},},},resolution: 120,// leadTime: 8000,// trailTime: 0,},};

4:联通效果样式。

    window.viewer.entities.add({id: 'polyline_' + id,show: show,polyline: {positions: new Cesium.CallbackProperty(polyline, false),width: 10,arcType: Cesium.ArcType.GEODESIC,// color: Cesium.Color.fromCssColorString('#7ffeff'),// material: Cesium.Color.fromCssColorString('#7ffeff').withAlpha(0.4),material: new Cesium.Spriteline1MaterialProperty(2000,'/gltfModel/images/line-arrow-blue.png',),},});

5:圆锥传感器。

import CesiumSensorVolumes from '../js/cesium-sensor-volumes';
//回放圆锥传感器const addConicSensorGraphics = (item, data, color) => {if (window.viewer.entities.values.length > 0) {window.viewer.entities.values.forEach((entitiesItem) => {if (entitiesItem.conicSensor && entitiesItem.conicSensor.id == item.id) {window.viewer.entities.remove(entitiesItem);}});}const entity: any = new Cesium.Entity({});entity.addProperty('conicSensor');let customSensors: any = new CesiumSensorVolumes.ConicSensorGraphics();const timeArr: any = [];data.sensorInfos.forEach((res) => {timeArr.push(simulationTimeStamp(res.dateTime));});// radius 是指波束的长度customSensors.id = item.id;customSensors.intersectionWidth = 1;customSensors.innerHalfAngle = 0;customSensors.outerHalfAngle = Cesium.Math.toRadians(data.sensorInfos[0].type.halfAngle);customSensors.minimumClockAngle = 0;customSensors.maximumClockAngle = 6.283185307179586;customSensors.lateralSurfaceMaterial = new Cesium.Color.fromCssColorString(color);customSensors.intersectionColor = new Cesium.Color.fromCssColorString(color);entity.conicSensor = customSensors;// 默认矩阵customSensors.modelMatrix = new Cesium.Matrix4();// 使用preRender 监听卫星每帧运动window.viewer.clock.onTick.addEventListener((time) => {// customSensors.show = false;// 判断数据源中所有实体是否准备就绪,viewer.dataSourceDisplay.dataSources = viewer.dataSourcesif (viewer.dataSourceDisplay.ready && viewer.clock.currentTime) {let position = item.position.getValue(viewer.clock.currentTime);if (position) {// 根据卫星位置和朝向转换为矩阵信息,此处使用的是后台计算的四元数,实际一般情况应该使用Cesium.Transforms+position转换let cartographic = window.viewer.scene.globe.ellipsoid.cartesianToCartographic(position);if (cartographic && cartographic.latitude) {let lat = Cesium.Math.toDegrees(cartographic.latitude);let lng = Cesium.Math.toDegrees(cartographic.longitude);customSensors.radius = cartographic.height + 6371000;var clypopsition = Cesium.Cartesian3.fromDegrees(lng, lat, cartographic.height);entity.position = clypopsition;//前端计算,默认朝下// var heading = Cesium.Math.toRadians(0);// var pitch = Cesium.Math.toRadians(180);// var roll = Cesium.Math.toRadians(0);// var hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);// entity.orientation = Cesium.Transforms.headingPitchRollQuaternion(clypopsition, hpr);// aaa.push(Cesium.Transforms.headingPitchRollQuaternion(clypopsition, hpr));//后端返回let unitQuaternion = data.sensorInfos[timeDiff(timeArr).index].pointType;let quat = new Cesium.Quaternion(unitQuaternion.X,unitQuaternion.Y,unitQuaternion.Z,unitQuaternion.W,);entity.orientation = quat;}}}});viewer.entities.add(entity);};

6:矩形传感器。

import CesiumSensorVolumes from '../js/cesium-sensor-volumes';
//实时仿真矩形传感器const addSimulationRectangularPyramidSensorVolume = (data, entity, color) => {let customSensor: any = new CesiumSensorVolumes.RectangularPyramidSensorVolume();let radius;entity.orbitDataList.forEach((res) => {if (res.height) {radius = res.height;}});// radius 是指波束的长度customSensor.id = entity.id;customSensor.radius = radius + 6371000;customSensor.intersectionWidth = 1;//把角度转换为弧度添加到传感器的x半角和水平半角上customSensor.xHalfAngle = Cesium.Math.toRadians(data.sensorInfos[0].type.horizontalHalfAngle);customSensor.yHalfAngle = Cesium.Math.toRadians(data.sensorInfos[0].type.verticalHalfAngle);customSensor.lateralSurfaceMaterial = Cesium.Material.fromType('Color');customSensor.lateralSurfaceMaterial.uniforms.color = new Cesium.Color.fromCssColorString(color);// 默认矩阵customSensor.modelMatrix = new Cesium.Matrix4();// 判断数据源中所有实体是否准备就绪,viewer.dataSourceDisplay.dataSources = viewer.dataSources// // 根据时间获取卫星实时笛卡尔位置// let position = item.position.getValue(viewer.clock.currentTime);let position;if (entity.orbitDataList[0] && entity.orbitDataList[0].lon) {position = Cesium.Cartesian3.fromDegrees(entity.orbitDataList[0].lon,entity.orbitDataList[0].lat,entity.orbitDataList[0].height,);}if (position) {// 根据卫星位置和朝向转换为矩阵信息,此处使用的是后台计算的四元数,实际一般情况应该使用Cesium.Transforms+position转换let cartographic = window.viewer.scene.globe.ellipsoid.cartesianToCartographic(position);if (cartographic && cartographic.latitude) {let lat = Cesium.Math.toDegrees(cartographic.latitude);let lng = Cesium.Math.toDegrees(cartographic.longitude);var clypopsition = Cesium.Cartesian3.fromDegrees(lng, lat, cartographic.height);// 将位置转换为平移矩阵let modelMatrix = Cesium.Matrix4.fromTranslation(clypopsition);let unitQuaternion = data.sensorInfos[0].pointType;let quat = new Cesium.Quaternion(unitQuaternion.X,unitQuaternion.Y,unitQuaternion.Z,unitQuaternion.W,);// 将四元数转换为旋转矩阵const orientation = Cesium.Matrix3.fromQuaternion(quat);customSensor.modelMatrix = Cesium.Matrix4.multiply(modelMatrix,Cesium.Matrix4.fromRotationTranslation(orientation, Cesium.Cartesian3.ZERO),new Cesium.Matrix4(),);}}viewer.scene.primitives._primitives.forEach((res) => {if (res.id && res.id == entity.id) {window.viewer.scene.primitives.remove(res);}});viewer.scene.primitives.add(customSensor);};

7:地面扇形雷达。1

  let radar = window.viewer.entities.add({id: 'radar_' + index,show: true,position: Cesium.Cartesian3.fromDegrees(res.position[0], res.position[1]),label: {// text: res.name,font: '21pt Lucida Console',// 字体颜色fillColor: new Cesium.Color.fromCssColorString('#fff'),outlineColor: new Cesium.Color.fromCssColorString('#fff'),outlineWidth: 2,// 应用于图像的统一比例。比例大于会1.0放大标签,而比例小于会1.0缩小标签。scale: 0.5,// 设置样式:FILL:填写标签的文本,但不要勾勒轮廓;OUTLINE:概述标签的文本,但不要填写;FILL_AND_OUTLINE:填写并概述标签文本。style: Cesium.LabelStyle.FILL_AND_OUTLINE,// 相对于坐标的水平位置verticalOrigin: Cesium.VerticalOrigin.CENTER,// 相对于坐标的水平位置horizontalOrigin: Cesium.HorizontalOrigin.LEFT,// 该属性指定标签在屏幕空间中距此标签原点的像素偏移量pixelOffset: new Cesium.Cartesian2(20, -30),// 显示在距相机的距离处的属性,多少区间内是可以显示的distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0, 100.5e6),// 是否显示show: true,},wall: {positions: new Cesium.CallbackProperty(() => {return Cesium.Cartesian3.fromDegreesArrayHeights(positionArr);}, false),material: new Cesium.Color.fromCssColorString('#00dcff82'),distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0.0, 100.5e6),},ellipsoid: {fill: false,radii: new Cesium.Cartesian3(res.radii, res.radii, res.radii),maximumCone: Cesium.Math.toRadians(90),material: new Cesium.Color.fromCssColorString('#00dcff82'),outline: true,outlineColor: new Cesium.Color.fromCssColorString('#00dcff82'),outlineWidth: 1,slicePartitions: 12,stackPartitions: 15,distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0.0, 100.5e6),},});var heading = 0;var positionArr = calcPoints(res.position[0],res.position[1],res.radii, //此处与圆的半径保持一致heading,);viewer.clock.onTick.addEventListener(() => {heading += 5.0;positionArr = calcPoints(res.position[0], res.position[1], res.radii, heading);});

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

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

相关文章

【LeetCode】5. 贪心算法:买卖股票时机

太久没更了,抽空学习下。 看一道简单题。 class Solution:def maxProfit(self, prices: List[int]) -> int:cost -1profit 0for i in prices:if cost -1:cost icontinueprofit_ i - costif profit_ > profit:profit profit_if cost > i:cost iret…

01vue3实战-----前言

01vue3实战-----前言 1.大前端时代2.技术栈3.项目大致展示4.创建Vue项目4.1Vue CLI4.2create-vue 5.参考资料 1.大前端时代 前端移动端iOS/android开发桌面端 window/mac 常用的electron框架来开发其它平台:穿戴设备、车载系统(智能汽车)、VR、AR…web3方向 2.技术栈 开发工…

使用request库实现接口测试-笔记

目录 request库request库的安装和查验request发送请求的语法获取响应结果指定内容案例 Unittest框架集成Requests库Unittest框架语法Unittest框架基础代码案例 request库 request库是python编写的,基于urllib的HTTP库,使用方便。 request库的安装和查验 安装&…

快速傅里叶离散变换FFT (更新中)

声明:参考了 y y c yyc yyc 的 blog 和 PPT (from smwc) ,以及 w z r wzr wzr 的 blog 。 目录 Part 1 多项式Part 2 FFT概论Part 3 点值与插值Part 4 复数,单位根Part 5 Part 1 多项式 定义:对于有限数列 A 0 A_{0} A0​~ n…

【C++】STL——list的使用

目录 💕1.带头双向链表List 💕2.list用法介绍 💕3.list的初始化 💕4.size函数与resize函数 💕5.empty函数 💕6.front函数与back函数 💕7.push_front,push_back,pop_front,pop_back函数…

2021Java面试-基础篇

文章目录 前言一: Java概述 1、何为编程2、JDK1.5之后的三大版本3、JVM,JRE和JDK的关系4、什么是跨平台?原理是什么5、Java语言有哪些特点6、什么是字节码?采用字节码的最大好处是什么7、什么是Java程序的主类?应用程序和小程序的…

MapStruct工具类的使用

文章目录 1.简介2.作用2.1 属性拷贝2.2 类型安全2.3 性能高效2.4 自定义转换 3.如何使用3.1 创建一个maven工程项目并引入mapstruct的坐标依赖:3.2 源对象类3.3 目标对象类(和源对象类中的字段属性名相同)3.4 创建接口SyncMapper(…

FPGA| 使用Quartus II报错Top-level design entity ““ is undefined

1、使用FPGA准备点亮LED测试下板子,发现这个报错Error (12007): Top-level design entity "LEDLED" is undefined 工程如上图 报错如下图 2、分析到原因是因为工程名称和顶层模块里面的module名称不一样导致 解决办法:修改module名称和顶层模…

Window获取界面空闲时间

‌GetLastInputInfo‌是一种Windows API函数,用于获取上次输入操作的时间。 该函数通过LASTINPUTINFO结构返回最后一次输入事件的时间。 原型如下 BOOL WINAPI GetLastInputInfo(PLASTINPUTINFO plii);那么可以利用GetLastInputInfo来得到界面没有操作的时长 uint…

LeetCode - #198 打家劫舍

网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…

验证工具:SVN版本控制

1-SVN概念 SVN(Subversion)是一种集中式版本控制系统,它用于文件和目录的版本管理,允许多个用户协同工作,同时追踪每个文件和目录的历史修改记录。以下是关于SVN版本控制的详细介绍: 一、SVN的基本概念 仓库(Repository):SVN的仓库是一个集中存储所有文件和目录的地…

【DeepSeek】本地私有化部署 DeepSeek 模型教程

一、引言 DeepSeek 模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自身需求进行定制化配置。本教程将详细介绍如何在本地进行 DeepSeek 模型的私有…

【玩转 Postman 接口测试与开发2_016】第13章:在 Postman 中实现契约测试(Contract Testing)与 API 接口验证(上)

《API Testing and Development with Postman》最新第二版封面 文章目录 第十三章 契约测试与 API 接口验证1 契约测试的概念2 契约测试的工作原理3 契约测试的分类4 DeepSeek 给出的契约测试相关背景5 契约测试在 Postman 中的创建方法6 API 实例的基本用法7 API 实例的类型实…

为什么“记住密码”适合持久化?

✅ 特性 1:应用重启后仍需生效 记住密码的本质是长期存储用户的登录凭证(如用户名、密码、JWT Token),即使用户关闭应用、重启设备,仍然可以自动登录。持久化存储方案: React Native 推荐使用 AsyncStorag…

echarts、canvas这种渲染耗时的工作能不能放在webworker中做?

可以将 ECharts、Canvas 等渲染耗时的工作放在 Web Worker 中进行处理。Web Worker 允许在后台线程中运行 JavaScript,从而将计算密集型任务从主线程中分离出来,避免阻塞用户界面。以下是一些关键点: 优势 性能提升:将耗时的渲染…

proxmox通过更多的方式创建虚拟机

概述 作为一名资深运维工程师,我们经常需要在 Proxmox 虚拟化平台上创建和管理虚拟机。本文将介绍三种不同的方式在 Proxmox 上创建 Ubuntu 虚拟机: 通过 Proxmox 命令创建虚拟机通过 Shell 脚本自动化创建虚拟机使用 Proxmox API 创建虚拟机 每种方式…

【分布式架构理论3】分布式调用(2):API 网关分析

文章目录 一、API 网关的作用1. 业务层面:简化调用复杂性2. 系统层面:屏蔽客户端调用差异3. 其他方面: 二、API 网关的技术原理1. 协议转换2. 链式处理3. 异步请求机制1. Zuul1:同步阻塞处理2. Zuul2:异步非阻塞处理 三…

使用线性回归模型逼近目标模型 | PyTorch 深度学习实战

前一篇文章,计算图 Compute Graph 和自动求导 Autograd | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 使用线性回归模型逼近目标模型 什么是回归什么是线性回归使用 PyTorch 实现线性回归模型代码执行结…

20250205——Windows系统基于ollama的DeepSeek-R1本地安装

1、安装ollama 1.1 Windows系统 打开ollama官网链接Download Ollama on Windows,根据自己的系统下载安装包,如果是Windows系统,下载Windows版本。 1.1 Linux系统 (这个是因为运行遇到报错了,想自己记录一下解决方法&a…

VSCode中使用EmmyLua插件对Unity的tolua断点调试

一.VSCode中搜索安装EmmyLua插件 二.创建和编辑launch.json文件 初始的launch.json是这样的 手动编辑加上一段内容如下图所示: 三.启动调试模式,并选择附加的进程