多个立方体盒子组成

效果:

知识了解:

  在同一水平上,盒子经纬度计算:经度有误差,纬度没有误差

  纬度计算:lat=50/111320 约等于0.000449

  经度计算:lon=50/111320*cos(纬度) 约等于0.000519°

一个立方体:

  // 添加一个立方体const redbox = viewer.entities.add({// 名称name: "Red box with black outline",// 位置(经度、纬度、高度)position: Cesium.Cartesian3.fromDegrees(116.397, 39.917, 0),box: {// 设置立方体的尺寸(长宽高)数值单位是米dimensions: new Cesium.Cartesian3(40.0, 30.0, 50.0), // 立方体尺寸// withAlpha(0.5)表示 50% 的透明度material: Cesium.Color.RED.withAlpha(0.5), // 立方体颜色outline: true, // 是否显示边框outlineColor: Cesium.Color.BLACK, // 边框颜色},});// 将视图聚焦到创建的立方体viewer.zoomTo(redbox);

多个立方体:

封装生成多个或者一个立方体的方法:

//BoxEntityManager.js
import * as Cesium from "cesium";class BoxEntityManager {constructor(viewer) {this.viewer = viewer;this.boxEntities = [];}// 创建单个立方体createBox (position, dimensions, color, name) {const boxEntity = this.viewer.entities.add({name: name || `Box-${this.boxEntities.length}`,position: position,box: {dimensions: dimensions || new Cesium.Cartesian3(116.397, 39.917, 100),material: color || Cesium.Color.fromRandom({ alpha: 1.0 }),outline: true,outlineColor: Cesium.Color.BLACK}});this.boxEntities.push(boxEntity);return boxEntity;}// 创建多个立方体createMultipleBoxes (positionsArray) {positionsArray.forEach((pos, index) => {this.createBox(Cesium.Cartesian3.fromDegrees(pos.lon, pos.lat, pos.height),pos.dimensions,pos.color,pos.name);});}// 根据名称删除立方体removeBoxByName (name) {const entity = this.boxEntities.find(e => e.name === name);if (entity) {this.viewer.entities.remove(entity);this.boxEntities = this.boxEntities.filter(e => e.name !== name);}}// 删除所有立方体removeAllBoxes () {this.boxEntities.forEach(entity => {this.viewer.entities.remove(entity);});this.boxEntities = [];}// 聚焦到所有立方体zoomToBoxes () {this.viewer.zoomTo(this.viewer.entities);}
}// 导出类
export default BoxEntityManager;

计算经纬度加减50米后的盒子坐标:

// calculateCoordinateOffset.js
/*** 计算经纬度加减50米后的坐标* @param {number} longitude - 原始经度* @param {number} latitude - 原始纬度* @returns {Object} - 返回加减50米后的坐标对象*/
export function calculateCoordinateOffset (longitude, latitude) {// 地球半径(米)const EARTH_RADIUS = 6371000;// 偏移距离(米)const OFFSET_METERS = 50;// 计算纬度1度对应的距离(米)const LAT_METERS_PER_DEGREE = 111320;// 计算经度1度对应的距离(米)(需要根据纬度计算)const LON_METERS_PER_DEGREE = LAT_METERS_PER_DEGREE * Math.cos(latitude * Math.PI / 180);// 计算偏移的经纬度值const latOffset = OFFSET_METERS / LAT_METERS_PER_DEGREE;const lonOffset = OFFSET_METERS / LON_METERS_PER_DEGREE;return {longitude: {minus: longitude - lonOffset,  // 经度减50米plus: longitude + lonOffset    // 经度加50米},latitude: {minus: latitude - latOffset,   // 纬度减50米plus: latitude + latOffset     // 纬度加50米}};
}

使用:

<template><div id="cesiumContainer"></div>
</template><script setup>
import * as Cesium from "cesium";
import { onMounted, ref } from "vue";
import BoxEntityManager from './js/boxEntities.js';
import { calculateCoordinateOffset } from "./js/coordinateOffset.js";
onMounted(() => {// 使用Cesium的Ion服务进行认证Cesium.Ion.defaultAccessToken ="认证码";// 创建一个Viewer实例const viewer = new Cesium.Viewer("cesiumContainer", {// 使用默认的影像图层和地形图层terrainProvider: Cesium.createWorldTerrain({ requestWaterMask: true }),// 查找位置工具geocoder: false,// 返回首页按钮homeButton: false,// 场景视角sceneModePicker: false,// 图层选择baseLayerPicker: false,// 导航帮助信息navigationHelpButton: false,// 动画播放速度animation: false,// 时间轴timeline: false,// 全屏按钮fullscreenButton: false,// VR按钮vrButton: false,});// 去除logoviewer.cesiumWidget.creditContainer.style.display = "none";// 飞入var destination = Cesium.Cartesian3.fromDegrees(116.397, 39.917, 1000.0);viewer.camera.flyTo({destination: destination,orientation: {heading: Cesium.Math.toRadians(0.0),pitch: Cesium.Math.toRadians(-90.0),roll: 0.0,},});// 创建BoxEntityManager实例const boxManager = new BoxEntityManager(viewer);const res = calculateCoordinateOffset(116.397, 39.917,);
//打印计算加减五十米的经纬度console.log(res, 'res');// 定义立方体数据const boxesData = [{lon: 116.397,lat: 39.9170,height: 0,dimensions: new Cesium.Cartesian3(50.0, 50.0, 50.0),color: Cesium.Color.RED.withAlpha(0.8),name: 'RedBox'}, {lon: 116.397,lat: 39.917449,height: 0,dimensions: new Cesium.Cartesian3(50.0, 50.0, 50.0),color: Cesium.Color.GREEN.withAlpha(0.8),name: 'GreenBox'},{lon: 116.397,lat: 39.917,height: 50,dimensions: new Cesium.Cartesian3(50.0, 50.0, 50.0),color: Cesium.Color.BLUE.withAlpha(0.8),name: 'BlueBox'}];// 创建多个立方体boxManager.createMultipleBoxes(boxesData);// 聚焦到立方体boxManager.zoomToBoxes();
});</script>

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

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

相关文章

CentOS进入单用户模式进行密码重置

一、单用户模式介绍 单用户模式是一种特殊的启动模式&#xff0c;主要用于系统维护和故障排除。在单用户模式下&#xff0c;系统以最小化的状态启动&#xff0c;只有最基本的系统服务会被加载&#xff0c;通常只有root用户可以登录。这种模式提供了对系统的完全控制&#xff0…

模型训练识别手写数字(一)

一、模型训练数据集 1. 导入所需库 import numpy as np from sklearn.datasets import fetch_openmlnumpy 是用于数值计算的库。 fetch_openml 是用于从 OpenML 下载数据集的函数。 2. 获取 MNIST 数据集 X, y fetch_openml(mnist_784, version1, return_X_yTrue)fetch_ope…

Spring Boot与Flyway实现自动化数据库版本控制

一、为什么使用Flyway 最简单的一个项目是一个软件连接到一个数据库&#xff0c;但是大多数项目中我们不仅要处理我们开发环境的副本&#xff0c;还需要处理其他很多副本。例如&#xff1a;开发环境、测试环境、生产环境。想到数据库管理&#xff0c;我们立刻就能想到一系列问…

Ovis原理解读: 多模态大语言模型的结构嵌入对齐

论文&#xff1a;https://arxiv.org/pdf/2405.20797 github:https://github.com/AIDC-AI/Ovis 在多模态大语言模型 (MLLM) 中&#xff0c;不同的嵌入策略有显著的区别。以下是使用基于连接器的方法与 Ovis 方法的比较&#xff1a; 基于连接器的方法-优缺点(connector-based …

斜杠往哪斜、路径绝对还是相对,终端目录切换不再迷茫

目录 路径表示绝对路径相对路径两者区别 路径中斜杠的用法正反斜杠对比表一个常见的问题 终端切换目录常用cd指令同一盘符内跨盘符 路径表示 在计算机文件系统中&#xff0c;路径是用来指定文件或目录位置的一种方式。路径可以是绝对路径或相对路径&#xff1a; 绝对路径 绝…

cmake 编译 vtk

1. 下载 VTK 源码 vtk 源码&#xff0c;点击&#xff1a;官网下载 在官网选择合适的版本下载&#xff0c;这里下载的是 vtk 8.2.0 版本 2. 下载 CMake CMake 工具&#xff0c;点击&#xff1a;镜像下载 下载版本比较新的 CMake 版本&#xff0c;这里使用的是 CMake 3.29.2 版…

在不支持AVX的linux上使用PaddleOCR

背景 公司的虚拟机CPU居然不支持avx, 默认的paddlepaddle的cpu版本又需要有支持avx才行,还想用PaddleOCR有啥办法呢? 是否支持avx lscpu | grep avx 支持avx的话,会显示相关信息 如果不支持的话,python运行时导入paddle会报错 怎么办呢 方案一 找公司it,看看虚拟机为什么…

C++基础:constexpr,类型转换和选择语句

constexpr 提到constexpr&#xff0c;我们会发现它和const类比 常和const类比constexpr符号常量必须给定一个在编译时已知的值&#xff0c; 若某个变量初始化时的值在编译时未知&#xff0c;但初始化后绝不变。 #include<iostream> #include<vector> #include&l…

【机器学习基础】激活函数

激活函数 1. Sigmoid函数2. Tanh&#xff08;双曲正切&#xff09;函数3. ReLU函数4. Leaky ReLU函数 1. Sigmoid函数 观察导数图像在我们深度学习里面&#xff0c;导数是为了求参数W和B&#xff0c;W和B是在我们模型model确定之后&#xff0c;找出一组最优的W和B&#xff0c;使…

Go使用exec.Command() 执行脚本时出现:file or directory not found

使用 Go 提供的 exec.Command() 执行脚本时出现了未找到脚本的 bug&#xff0c;三个排查思路 &#xff1a; exec.Command(execName, args…) 脚本名字不允许相对路径 exec.Command(execName, args…) execName 只能有脚本名&#xff0c;不允许出现参数 如果你是使用 Windows …

Python爬虫:商品详情的“八卦记者”

亲爱的代码侦探们&#xff0c;今天咱们不聊那些让人头秃的bug&#xff0c;也不谈那些让人眼花的架构图。咱们来聊聊那些在代码世界里挖掘商品秘密的“八卦记者”——Python爬虫。 Python爬虫&#xff1a;商品详情的“八卦记者” 想象一下&#xff0c;你在代码的世界里&#xf…

[笔记] ffmpeg docker编译环境搭建

文章目录 环境参考dockerfile 文件步骤常见问题docker 构建镜像出现 INTERNAL_ERROR 失败? 总结 环境 docker 环境 系统centos 7.9 (无所谓了 你用docker编译就无所谓系统了) ffmpeg3.3 参考 https://blog.csdn.net/jiedichina/article/details/71438112 dockerfile 文件 …

《等保测评新视角:安全与发展的双赢之道》

在数字化转型的浪潮中&#xff0c;企业面临的不仅是技术革新的挑战&#xff0c;更有信息安全的严峻考验。等保测评&#xff0c;作为国家网络安全等级保护的一项重要措施&#xff0c;不仅为企业的安全护航&#xff0c;更成为推动企业高质量发展的新引擎。本文将从全新的视角&…

如何将markdown文件转换为pdf

最近笔者在用vscode写markdown&#xff0c;但是提交时往往需要交pdf。所以就涉及到如何将markdown转化为pdf格式。 首先&#xff0c;需要在vscode上安装插件 markdown Preview Enhanced 之后在vscode的右上角即可看到下述图标&#xff0c;点击&#xff0c;vscode右半面就会显示…

【论文阅读】PGAN

1. WHY 问题 图像超分辨率一直是一个热门研究课题&#xff0c;具有重要的应用价值。基于生成对抗网络GAN的单幅图像超分辨率方法显示重建图像与人类视觉特征更一致。因此&#xff0c;基于 GAN 的网络优化已成为图像超分辨率的主流。然而&#xff0c;一些最新研究表明&#xf…

【JIT/极态云】技术文档--函数设计

一、简介 函数是计算机编程中非常重要的概念。它是一段代码&#xff0c;可以在程序中多次调用&#xff0c;用于完成特定的任务。 函数通常接受输入参数&#xff0c;执行特定的操作&#xff0c;并返回一个结果。这个结果可以被程序中的其他代码使用。 二、新建函数 在函数列表…

Springboot整合spring-boot-starter-data-elasticsearch

前言 <font style"color:rgb(36, 41, 47);">spring-boot-starter-data-elasticsearch</font> 是 Spring Boot 提供的一个起始依赖&#xff0c;旨在简化与 Elasticsearch 交互的开发过程。它集成了 Spring Data Elasticsearch&#xff0c;提供了一套完整…

mysql-Innodb锁相关内容

1、InnoDB存储引擎包含的锁类型 共享锁&#xff08;S锁&#xff09;和排他锁&#xff08;X锁&#xff09;意向锁记录锁间隙锁Next-key锁插入意向锁Auto-INC 锁空间索引的谓词锁 2、共享锁&#xff08;S锁&#xff09;和排他锁&#xff08;X锁&#xff09;-- 锁定数据行 共享…

使用Git进行团队协作开发

使用Git进行团队协作开发 Git简介 安装Git 在Windows上安装Git 在macOS上安装Git 在Linux上安装Git 设置Git用户信息 创建Git仓库 基本Git命令 添加文件 提交更改 查看状态 克隆仓库 推送更改 获取更改 分支管理 创建分支 切换分支 合并分支 删除分支 解决合并冲突 检查冲突…

docker安装、设置非sudo执行、卸载

安装 sudo snap install docker 设置docker非sudo执行 sudo groupadd docker sudo usermod -aG docker $USER newgrp docker sudo chown root:docker /var/run/docker.sock 卸载docker 1.删除docker及安装时自动安装的所有包 apt-get autoremove docker docker-ce docker-…