三维引擎cesium学习经验

三维引擎cesium学习经验:

1、初始化viewer对象

在这里插入图片描述

2、对entity的操作:添加,隐藏,修改,去除,居中显示

在这里插入图片描述在这里插入图片描述

3、去除掉entity的双击事件

在这里插入图片描述

4、获取当前视角高度

在这里插入图片描述

5、获取经纬度在屏幕上的位置

在这里插入图片描述

6、获取三维场景屏幕中心点坐标

在这里插入图片描述

7、响应鼠标单击事件,获取屏幕点击坐标

在这里插入图片描述

8、跟踪相机视角的改变

在这里插入图片描述

9、让视角到达一个地点

在这里插入图片描述

10、加载GeoJson文件数据

在这里插入图片描述

 addGeoJson() {let res = await Cesium.GeoJsonDataSource.load("sichuan.json", {stroke: Cesium.Color.WHITE,fill: Cesium.Color.BLUE.withAlpha(0.3), //注意:颜色必须大写,即不能为bluestrokeWidth: 5,});this.viewer.dataSources.add(res);let entities = res.entities.values;let colorHash = {};for (let i = 0; i < entities.length; i++) {let entity = entities[i];let name = entity.name;let color = colorHash[name];if (!color) {color = Cesium.Color.fromRandom({alpha: 1,});colorHash[name] = color;}entity.polygon.material = color;entity.polygon.outline = false;entity.polygon.extrudedHeight = entity.properties.childrenNum * 5000; //高度扩大5000倍,便于观察}},},

11、获取实体位置并转化为经纬度坐标

/*** 获取实体的位置 并转换成string* @param {\} entity 多边形 矩形 点 圆形 多段线* @returns*/getPositionsByEnity(entity) {if (entity) {if (entity.polygon) {return JSON.stringify(this.getLngLatByCartesian3(entity.polygon.hierarchy.getValue().positions));} else if (entity.rectangle) {let rectangle = entity.rectangle.coordinates.getValue();let result = [];Cesium.Rectangle.subsample(rectangle,Cesium.Ellipsoid.WGS84,rectangle.height,result);return JSON.stringify(this.getLngLatByCartesian3(result));} else if (entity.point) {return JSON.stringify(this.getLngLatByCartesian3(entity.position._value));} else if (entity.ellipse) {let res = {center: this.getLngLatByCartesian3(entity.position._value),radius: entity.ellipse.semiMajorAxis.getValue(),};return JSON.stringify(res);} else if (entity.polyline) {return this.getLngLatByCartesian3(entity.polyline.positions.getValue(), 'polyline')}}return undefined;},/*** 笛卡尔坐标转换经纬度坐标* @param {*} car3_ps* @returns*/getLngLatByCartesian3(car3_ps, type) {let result = null;if (car3_ps instanceof Cesium.Cartesian3) {let _cartographic = Cesium.Cartographic.fromCartesian(car3_ps);let _lat = Cesium.Math.toDegrees(_cartographic.latitude);let _lng = Cesium.Math.toDegrees(_cartographic.longitude);let _alt = _cartographic.height;if (type == 'polyline') {result = { longitude: _lng, latitude: _lat, elevation: _alt }} else {result = { lng: _lng, lat: _lat, alt: _alt }}return result;} else if (car3_ps instanceof Array) {let res = [];for (let i = 0; i < car3_ps.length; i++) {let _cartographic = Cesium.Cartographic.fromCartesian(car3_ps[i]);let _lat = Cesium.Math.toDegrees(_cartographic.latitude);let _lng = Cesium.Math.toDegrees(_cartographic.longitude);let _alt = _cartographic.height;if (type == 'polyline') {res.push({ longitude: _lng, latitude: _lat, elevation: _alt })} else {res.push({ lng: _lng, lat: _lat, alt: _alt })}}return res;}},

12、获取entity的事件触发时返回视图坐标

// 获取entities实体
let entitie = viewer.entities.getById('id');
let Cartesian3 = entitie.position._value;// 添加地形后,用scene把Cartesian3重新转换一下
let cartographic= viewer.scene.globe.ellipsoid.cartesianToCartographic(Cartesian3);
cartesian3 = Cesium.Cartesian3.fromDegrees(Cesium.Math.toDegrees(cartographic.longitude),Cesium.Math.toDegrees(cartographic.latitude),Math.round((viewer.scene.globe.getHeight(cartographic)) * 100) / 100
);// 获取视图坐标
let position = Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, cartesian3);//获取的pick对象
let pick = viewer.scene.pick(position);

13、动态修改添加的实体entity的透明度

1 添加实体
this.shape = this.viewer.entities.add({name: "Redrectangle",rectangle: {coordinates: Cesium.Rectangle.fromDegrees(-110.0,20.0,-80.0,25.0),material: Cesium.Color.RED.withAlpha(0.5),},
});
2使用滑块组件控制透明度
<el-slider v-model="value" :format-tooltip="formatTooltip" @input="changeSlide"></el-slider>export default {data() {return {value:50,rectangleAlpha:0.5, //矩形透明shape:null,};},methods:{//滑块归一化formatTooltip(val){return val/100;},//滑块改变时触发改变透明度changeSlide(val){this.rectangleAlpha = val/100let color = this.shape.rectangle.material.color.getValue().clone();     this.shape.rectangle.material.color.setValue(color.withAlpha(this.rectangleAlpha));}}
}

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

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

相关文章

虚拟机VMware的安装问题ip错误,虚拟网卡

要么没有虚拟网卡、有网卡远程连不上等 一般出现在win11 家庭版 1、是否IP错误 ip addr 2、 重置虚拟网卡 3、查看是否有虚拟网卡 4、如果以上检查都解决不了问题 如果你之前有vmware 后来卸载了&#xff0c;又重新安装&#xff0c;一般都会有问题 卸载重装vmware: 第一…

裸机LED 灯实验

G1、硬件原理分析 2、寄存器说明 a、主要配置寄存器 使能 GPIO1 时钟—CCM_CCGR1 设置 GPIO1_IO03 的复用功能—IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03 配置 GPIO1_IO03—IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03 设置GPIO GPIO1_GDIR 的 bit3 要设置为 1,表示输出 控制GPIO输出电平,…

FastApi教程

FastApi&#xff0c;一个用于构建 API 的现代、快速&#xff08;高性能&#xff09;的web框架。 FastApi是建立在Starlette和Pydantic基础上的&#xff0c;Pydantic是一个基于Python类型提示来定义数据验证、序列化和文档的库。Starlette是一种轻量级的ASGI框架/工具包&#x…

C语言 文件操作——按行读写文件

目录 按行写文件 按行读文件 按行读写文件 按行写文件 int puts ( const char *s ); 将字符串 s 写入标准输出流 stdout &#xff0c;并在其后添加一个换行符 按字符串&#xff08;行&#xff09; 写 文件 int fputs ( const char *s, FILE *fp); 将字符串 s 写入 fp 所…

轻松上手:使用 Vercel 部署 HTML 页面教程

&#x1f600; 在学习前端的过程中&#xff0c;部署项目往往是一个令人头疼的问题。然而&#xff0c;Vercel 为我们提供了一个便捷且免费的解决方案。 Vercel 是一个强大的云平台&#xff0c;专门用于前端项目的部署和托管。它不仅支持多种前端框架和静态网站生成器&#xff0…

【中标麒麟服务器操作系统实例分享】java应用DNS解析异常分析及处理

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://documentkylinos.cn 情况描述 中标麒麟服务器操作系统V7运行在 ARM虚…

基于Transformer的自编码器模型在故障检测中的应用

在现代工业和制造领域&#xff0c;故障检测是保证设备和生产线安全、高效运行的关键。传统的故障检测方法往往依赖于人工经验或规则&#xff0c;然而&#xff0c;这些方法的准确性和泛化能力有限。随着深度学习技术的迅速发展&#xff0c;越来越多的智能故障检测方法应运而生&a…

Sigrity System Explorer Snip Via Pattern From Layout模式从其它设计中截取过孔模型和仿真分析操作指导

Sigrity System Explorer Snip Via Pattern From Layout模式从其它设计中截取过孔模型和仿真分析操作指导 Sigrity System Explorer Snip Via Pattern From Layout模式支持从其它设计中截取过孔模型用于仿真分析,同样以差分模板为例 具体操作如下 双击打开System Explorer软件…

2024年度个人总结

一转眼已经2024年度最后一个月了&#xff0c;今年基本没有在CSDN发布内容&#xff0c;包括其他平台&#xff08;B站&#xff09;&#xff0c;倒是在其他地方&#xff08;我的个人网站和V2EX&#xff09;发布一些零碎的东西&#xff0c;主要是因为今年换了工作后太累了&#xff…

汽车IVI中控开发入门及进阶(42):OpenVG

概览: OpenVG是一个无版权、跨平台的API,它为高级用户界面和矢量图形库(如SVG)提供了一个低级硬件加速接口。OpenVG主要针对需要便携式加速高质量矢量图形以获得引人注目的用户界面和文本的消费电子产品、手持设备、可穿戴设备和汽车设备,同时使硬件加速能够在非常低的功…

基于微信小程序的消防隐患在线举报系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实…

如何重新设置VSCode的密钥环密码?

故障现象&#xff1a; 忘记了Vscode的这个密码&#xff1a; Enter password to unlock An application wants access to the keyring “Default ke... Password: The unlock password was incorrect Cancel Unlock 解决办法&#xff1a; 1.任意terminal下&#xff0c;输入如下…

springcloud-gateway获取应用响应信息乱码

客户端通过springcloud gateway跳转访问tongweb上的应用&#xff0c;接口响应信息乱码。使用postman直接访问tongweb上的应用&#xff0c;响应信息显示正常。 用户gateway中自定义了实现GlobalFilter的Filter类&#xff0c;在该类中获取了上游应用接口的响应信息&#xff0c;直…

JS萤石云录像回放拖动进度条无法正常播放

问题描述&#xff1a; 本项目版本&#xff1a;vue2.6.12&#xff0c;webpack3.6.0&#xff0c;ezuikit-js0.7.2 在使用萤石云的JavaScript SDK做监控的直播、录像回放时&#xff0c;遇到部分设备的录像回放&#xff0c;无法根据控制面板的拖动进度条查看某时间段的录像。 官方…

2024.12.21辩论赛感受

背景 今天辩论赛的双方论点是&#xff1a; 正方&#xff1a;寒假留在研发中心的收获大 反方&#xff1a;寒假去做其他事情的收获 辩论赛&#xff0c;为了锻炼自己&#xff0c;选择了不想选择以及相对不好辩论的反方。出现的状况有一下几点&#xff1a; 1.发现自己脑子完全跟不…

混元大模型简介及个人运行方案

一、混元大模型简介 混元大模型&#xff08;HunyuanVideo&#xff09;是一个开源的视频生成基础模型&#xff0c;专为高质量的视频生成任务设计。它融合了多项先进技术和创新架构&#xff0c;在视觉质量、多样性、文本与视频的对齐度&#xff0c;以及生成的稳定性方面表现出色…

图漾相机-ROS1_SDK_ubuntu版本编译(新版本)

文章目录 官网编译文档链接官网SDK下载链接1、下载 Camport ROS1 SDK1.下载git2、下载链接 2、准备编译工作1、安装 catkin2、配置环境变量3. 将Camport3中的linux库文件拷贝到 user/lib目录下4、修改lunch文件制定相机&#xff08;可以放在最后可以参考在线文档&#xff09;**…

基于Redis的网关鉴权方案与性能优化

文章目录 前言一、微服务鉴权1.1 前端权限检查1.2 后端权限检查1.3 优缺点 二、网关鉴权2.1 接口权限存储至Redis2.2 网关鉴权做匹配 总结 前言 在微服务架构中&#xff0c;如何通过网关鉴权结合Redis缓存提升权限控制的效率与性能。首先&#xff0c;文章对比了两种常见的权限…

leetcode-283.移动零-day13

方法一&#xff1a;双指针遇 0 交换 1. 基本思路回顾 该方法使用了两个指针m和i&#xff0c;m用于标记当前已经处理好的非零元素应该放置的位置&#xff0c;i用于遍历整个数组。当遇到nums[m]为0时&#xff0c;会通过内层while循环找到下一个非零元素&#xff08;如果存在的话…

【Python入门】Python控制成分

文章一览 一 、顺序结构二、分支结构多分支结构 三、循环结构1. for语句循环结构range&#xff08;&#xff09;函数 2. while语句构成循环1&#xff09;while 循环流程 3、for 循环和 while 循环的区别4、for 循环和 while 循环效率比较 四、函数1、函数定义1) 内置函数2) 非内…