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名称和顶层模…

LeetCode - #198 打家劫舍

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

【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 实例的类型实…

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是这样的 手动编辑加上一段内容如下图所示: 三.启动调试模式,并选择附加的进程

pytorch基于FastText实现词嵌入

FastText 是 Facebook AI Research 提出的 改进版 Word2Vec,可以: ✅ 利用 n-grams 处理未登录词 比 Word2Vec 更快、更准确 适用于中文等形态丰富的语言 完整的 PyTorch FastText 代码(基于中文语料),包含&#xff1…

JVS低代码逻辑引擎多种业务场景触发案例配置:涵盖列表页按钮、表单数据、流程审批、外部API接口调用等

逻辑引擎作为JVS低代码开发套件的核心组件,专注于业务逻辑的快速构建与实现,它扮演着程序配置与执行的核心角色,适用于多样化的应用场景。该逻辑引擎设计灵活,能够通过多种配置方式被触发,以精准响应各类业务需求并实现…

文字加持:让 OpenCV 轻松在图像中插上文字

前言 在很多图像处理任务中,我们不仅需要提取图像信息,还希望在图像上加上一些文字,或是标注,或是动态展示。正如在一幅画上添加一个标语,或者在一个视频上加上动态字幕,cv2.putText 就是这个“文字魔术师”,它能让我们的图像从“沉默寡言”变得生动有趣。 今天,我们…

2024年12月 Scratch 图形化(四级)真题解析 中国电子学会全国青少年软件编程等级考试

202412 Scratch 图形化(四级)真题解析 中国电子学会全国青少年软件编程等级考试 一、选择题(共10题,共30分) 第 1 题 列表存放全班同学的身高,小猫运行下列程序,下列选项说法正确的是?( &#…