Cesium 空间量算——高度量算

高度量算

    • 需求
    • 分析

需求

测量两个点之间的高度
在这里插入图片描述

分析

直线,水平,垂直测量我们也叫高度的测量,大概原理就是空间两点垂直与地面画一个直角三角形,分别标出每条线的长度

//  添加标签
addLabel(centerPosition, text) {return this.viewer.entities.add(new Cesium.Entity({position: centerPosition,label: {text: text,font: '14px sans-serif',style: Cesium.LabelStyle.FILL_AND_OUTLINE, //FILL  FILL_AND_OUTLINE OUTLINEfillColor: Cesium.Color.YELLOW,showBackground: true, //指定标签后面背景的可见性backgroundColor: new Cesium.Color(0.165, 0.165, 0.165, 0.8), // 背景颜色backgroundPadding: new Cesium.Cartesian2(6, 6), //指定以像素为单位的水平和垂直背景填充paddingpixelOffset: new Cesium.Cartesian2(0, -25),disableDepthTestDistance: Number.POSITIVE_INFINITY}}));
},
// 添加点
addPoint(position) {return this.viewer.entities.add({position: position,point:{pixelSize: 10,color: Cesium.Color.YELLOW}});
},
// 添加线
addLine(position) {console.log(position);const lonlat = [];for (let index = 0; index < position.length; index++) {const longitude =  Cesium.Math.toDegrees(Cesium.Cartographic.fromCartesian(position[index]).longitude);const latitude =  Cesium.Math.toDegrees(Cesium.Cartographic.fromCartesian(position[index]).latitude);lonlat.push(longitude,latitude);}return this.viewer.entities.add({name: 'distance-line',polyline: {positions: Cesium.Cartesian3.fromDegreesArray(lonlat),width: 2,material: Cesium.Color.RED,// clampToGround: true}});
},
//逻辑代码如下
getLengthText(firstPoint, secondPoint) {// 计算距离var length = Cesium.Cartesian3.distance(firstPoint, secondPoint);if (length > 1000) {length = (length / 1000).toFixed(2) + " 公里";} else {length = length.toFixed(2) + " 米";}return length;
},
measureHeight() {let positions = [];var labelEntity_1 = null; // 标签实体var labelEntity_2 = null; // 标签实体var labelEntity_3 = null; // 标签实体// 注册鼠标左击事件this.viewer.screenSpaceEventHandler.setInputAction((clickEvent) => {var cartesian = this.viewer.scene.pickPosition(clickEvent.position); // 坐标// 存储第一个点if (positions.length == 0) {if(!cartesian){return false}positions.push(cartesian.clone());this.addPoint(cartesian);// 注册鼠标移动事件this.viewer.screenSpaceEventHandler.setInputAction((moveEvent) => {var movePosition = this.viewer.scene.pickPosition(moveEvent.endPosition); // 鼠标移动的点if(!movePosition){return false}if (positions.length >= 2) {positions.pop();positions.pop();positions.pop();var cartographic = Cesium.Cartographic.fromCartesian(movePosition);var height = Cesium.Cartographic.fromCartesian(positions[0]).height;var verticalPoint = Cesium.Cartesian3.fromDegrees(Cesium.Math.toDegrees(cartographic.longitude), Cesium.Math.toDegrees(cartographic.latitude), height);positions.push(verticalPoint);positions.push(movePosition);positions.push(positions[0]);// 绘制labelif (labelEntity_1) {this.viewer.entities.remove(labelEntity_1);this.entityCollection.splice(this.entityCollection.indexOf(labelEntity_1), 1);this.viewer.entities.remove(labelEntity_2);this.entityCollection.splice(this.entityCollection.indexOf(labelEntity_2), 1);this.viewer.entities.remove(labelEntity_3);this.entityCollection.splice(this.entityCollection.indexOf(labelEntity_3), 1);}// 计算中点var centerPoint_1 = Cesium.Cartesian3.midpoint(positions[0], positions[1], new Cesium.Cartesian3());// 计算距离var lengthText_1 = "水平距离:" + this.getLengthText(positions[0], positions[1]);labelEntity_1 = this.addLabel(centerPoint_1, lengthText_1);this.entityCollection.push(labelEntity_1);// 计算中点var centerPoint_2 = Cesium.Cartesian3.midpoint(positions[1], positions[2], new Cesium.Cartesian3());// 计算距离var lengthText_2 = "垂直距离:" + this.getLengthText(positions[1], positions[2]);labelEntity_2 = this.addLabel(centerPoint_2, lengthText_2);this.entityCollection.push(labelEntity_2);// 计算中点// var centerPoint_3 = Cesium.Cartesian3.midpoint(positions[2], positions[3], new Cesium.Cartesian3());// // 计算距离// var lengthText_3 = "直线距离:" + this.getLengthText(positions[2], positions[3]);// labelEntity_3 = this.addLabel(centerPoint_3, lengthText_3);// this.entityCollection.push(labelEntity_3);} else {var verticalPoint = new Cesium.Cartesian3(movePosition.x, movePosition.y, positions[0].z);positions.push(verticalPoint);positions.push(movePosition);positions.push(positions[0]);// 绘制线this.addLine(positions);}}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);} else {// 存储第二个点positions.pop();positions.pop();positions.pop();var cartographic = Cesium.Cartographic.fromCartesian(cartesian);var height = Cesium.Cartographic.fromCartesian(positions[0]).height;var verticalPoint = Cesium.Cartesian3.fromDegrees(Cesium.Math.toDegrees(cartographic.longitude), Cesium.Math.toDegrees(cartographic.latitude), height);positions.push(verticalPoint);positions.push(cartesian);positions.push(positions[0]);this.addPoint(cartesian);// 绘制线this.addLine(positions);this.viewer.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);this.viewer.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE);}}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
},

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

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

相关文章

创邻科技,位居IDC MarketScape中国图数据库市场领导者类别

图数据库&#xff0c;正进入市场发展的新阶段。 随着中国经济社会数字化转型加速&#xff0c;数据成为新型生产要素。如何存储并管理海量数据&#xff0c;挖掘数据价值&#xff0c;打破原有增长天花板&#xff0c;成为企业重塑商业价值的关键。存量经济时代更需要深层关系挖掘&…

npm、yarn、pnpm如何清除缓存?

前端工程化创建项目会经常使用各种安装包管理工具&#xff0c;安装各种前端依赖包。例如&#xff0c;npm、yarn、pnpm等。时间一长&#xff0c;各种安装包管理工具的在安装依赖时&#xff0c;留下的缓存文件就会变得很大&#xff0c;以至于影响系统的运行&#xff0c;因此必要时…

6- 华为云查看容器日志

1 查看位置 二 进入容器查看 ls cat main.py # 退出命令是 exit() 或者 quit() cat main.py 在docker使用该命令进入文件后的退出命令

反转了,被嘲讽的苹果“假5G”,却是全球主流5G技术

苹果的5G信号被指造假&#xff0c;而一些业内人士指出苹果的信号显示符合3GPP的要求&#xff0c;面对专业人士的质疑&#xff0c;某项姓专家继续辩解&#xff0c;指5G NSA为假5G&#xff0c;然而笔者查找了全球运营商的5G网络建设却发现5G NSA竟然是主流的5G技术。 其实5G NSA与…

《定位》杂志专访丨中南大学杨泽发:InSAR是大范围矿山边坡监测利器

杨泽发 中南大学地球科学与信息物理学院教授 近日&#xff0c;为有效防范遏制矿山重特大事故发生&#xff0c;国家矿山安全监察局发布了《关于开展露天矿山边坡监测系统建设及联网工作的通知》&#xff0c;对矿山边坡监测建设作了“硬性规定”&#xff08;点击蓝字详细了解&…

【面试必刷TOP101】链表相加 单链表的排序

目录 题目&#xff1a;链表相加(二)_牛客题霸_牛客网 (nowcoder.com) 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目&#xff1a;单链表的排序_牛客题霸_牛客网 (nowcoder.com) 题目的接口&#xff1a;…

学Python的漫画漫步进阶 -- 第十四步.网络通信

学Python的漫画漫步进阶 -- 第十四步.网络通信 十四、网络通信14.1 基本的网络知识14.1.1 TCP/IP14.1.2 IP地址14.1.3 端口14.1.4 HTTP/HTTPS 14.2 搭建自己的Web服务器14.3 urllib.request模块14.3.1 发送GET请求14.3.2 发送POST请求 14.4 JSON数据14.4.1 JSON文档的结构14.4.…

arcgis拓扑检查实现多个矢量数据之间消除重叠区域

目录 环境介绍&#xff1a; 操作任务&#xff1a; 步骤&#xff1a; 1、数据库和文件结构准备 2、建立拓扑规则 3、一直下一页默认参数后&#xff0c;进行拓扑检查 4、打开TP_CK_Topology&#xff0c;会自动带出拓扑要素&#xff0c;红色区域为拓扑错误的地方&#xff1…

【HarmonyOS】元服务卡片router实现跳转到指定页面

【关键字】 元服务卡片、router跳转不同页面 【写在前面】 本篇文章主要介绍开发元服务卡片时&#xff0c;如何实现从卡片中点击事件跳转到指定的应用内页面功能。此处以JS UI开发服务卡片为例&#xff0c;JS卡片支持组件设置action&#xff0c;包括router事件和message事件&…

windows常见的命令行操作

1.查看网络 ipconfig 2.根据任务id关闭进程 1.模糊搜索服务 tasklist | findstr QQ 2.根据模糊搜索结果&#xff0c;获取对应的pid taskkill /F /PID 5128 其他常见命令 若不清楚参数&#xff0c;使用&#xff08;命令 /?&#xff09;即可查看help

Java 华为真题-猴子爬山

需求&#xff1a; 一天一只顽猴想去从山脚爬到山顶&#xff0c;途中经过一个有个N个台阶的阶梯&#xff0c;但是这猴子有一个习惯&#xff1a;每一次只能跳1步或跳3步&#xff0c;试问猴子通过这个阶梯有多少种不同的跳跃方式&#xff1f; 输入描述 输入只有一个整数N&#xff…

Digger PRO - Voxel enhanced terrains

资源链接在文末 Digger PRO​​​ 是一个简单但强大的工具,可以直接从 Unity 编辑器或游戏中创建天然洞穴和悬岩。会让你感觉自己手中握有一个体素地形,且毫无瑕疵。它实际上保持着最新、最快且可靠的 Unity 地形系统,并在你需要的地方无缝创建洞穴/悬岩峭壁网格。Digger 内…

Vue3项目中使用插槽

前言&#xff1a; 此文章仅记录插槽的使用&#xff0c;用于自己后期学习查看。 代码实现过程中&#xff0c;HelloWorld为子组件&#xff0c;HomeView为父组件 <slot></slot>元素&#xff1a; 是一个插槽出口&#xff0c;是写在子组件中的&#xff0c;表示了父组件…

ORM框架的发展历史

文章目录 JDBCJDBC操作的特点JDBC优化1.0JDBC优化2.0JDBC优化3.0 Apache DBUtils初始配置基本操作 SpringJDBC初始配置CRUD操作 HibernateORM介绍Hibernate的使用创建项目配置文件CRUD 操作其他方式 Hibernate总结 MyBatis JDBC JDBC操作的特点 最初的时候是直接通过jdbc来直…

【苹果】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本

前言 &#x1f34a;缘由 Iphone15来了&#xff0c;两年之约你还记得吗&#xff1f; 两年前&#xff0c;与特别的人有一个特别的约定。虽物是人非&#xff0c;但思念仍在。 遂整合之前iphone13及iphone14的相关抢购代码&#xff0c;完成一个SpringBoot监听Iphone15有货邮件提…

Foxit PDF SDK Windows 9.1 Crack

Foxit PDF SDK 变更日志 Windows/Linux/Mac 2023 年 8 月 新功能/增强功能 在开始签名之前设置外观。支持使用共享字典添加签名。允许在调用 Signature::StartSign() 之前增量保存文档。在签名前修改现有未签名分页印章签名的外观。支持使用共享字典添加分页签名。忽略全角…

51单片机项目(13)——基于51单片机的智能台灯protues仿真

本次设计&#xff0c;使用protues软件进行仿真&#xff0c;详情如下&#xff1a; 1.输入部分:由热释电红外传感器、光敏传感器、超声波测距传感器所构成的子电路组成。 2.输出模块:由1602液晶显示及其蜂鸣器报警系统组成。 3.中央处理器:主要有AT89C52单片机构成。 4.工作过…

TF-A如何支持Firmware镜像放回滚的

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】:【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈在TF-A中通过FIP工具打包镜像的时候,会在镜像的content cert中打包进一个Non-Volatile counter,即版本号 trus…

etc目录下的profile.d文件目录设置环境变量和全局脚本

一、设置环境变量 etc目录下的profile.d文件目录 /etc/profile.d 1、编写 vi test.sh文件内容 # jdk变量 export ZHK_HOME/root export PATH$PATH:$ZHK_HOME/test # 可以取出来ZHK_HOME变量给ZZZ_HOME赋值 export ZZZ_HOME${ZHK_HOME}/test2、刷新 执行source /etc/profile …

idea 使用 groovyScript 获取方法参数列表生成方法注释模板遇到的问题。

1、网上好多使用groovyScript来设置获取方法列表生成注释模板的代码&#xff0c;我这篇文章的是想讨论下这种方式存在的一个问题&#xff0c;希望有大佬能提供一个解决方案。 2、设置步骤什么的就省略了直接描述问题。 3、groovyScript代码段如下&#xff1a; groovyScript(…