vue3 + ts + cesium:绘制、拖动点 point

本文主要实现最基础的绘制点,并且可以拖动刚刚绘制的点。

实现效果:

    (1)单击鼠标左键绘制点;

    (2)单击鼠标右键结束绘制;

    (3)长按鼠标左键拖动点,实时更新点的位置;

    (4)抬起鼠标左键停止拖动点。

1. components/CesiumViewer/hooks/drawPoint.ts

import * as Cesium from "cesium";
import {disableDefaultScreenSpaceEventHandlers,enableDefaultScreenSpaceEventHandlers
} from "@/components/CesiumViewer/hooks/utils";export const drawPoint = () => {const handler = new Cesium.ScreenSpaceEventHandler(window.viewer.scene.canvas)// 单击左键 —— 绘制点handler.setInputAction((event: any) => {const cartesian = window.viewer.camera.pickEllipsoid(event.position, window.viewer.scene.globe.ellipsoid) // 拾取坐标if (Cesium.defined(cartesian)) {window.viewer.entities.add({// position: cartesian,position: new Cesium.CallbackProperty(() => {return cartesian}, false),point: {pixelSize: 20, // 点的大小color: Cesium.Color.fromCssColorString('#ff0000'),/* 根据视角远近控制点的比例 */scaleByDistance: new Cesium.NearFarScalar(1.5e2, 2.0, 8.0e6, 0.0),heightReference: Cesium.HeightReference.RELATIVE_TO_GROUND}})}}, Cesium.ScreenSpaceEventType.LEFT_CLICK)// 单击右键 —— 结束绘制handler.setInputAction(() => {handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK)}, Cesium.ScreenSpaceEventType.RIGHT_CLICK)// 长按左键 —— 拖动点handler.setInputAction((event: any) => {const pickedObject = window.viewer.scene.pick(event.position) // 拾取实体if (Cesium.defined(pickedObject) && pickedObject.id) {disableDefaultScreenSpaceEventHandlers() // 禁止屏幕移动handler.setInputAction((movement: any) => {let pickedPoint = pickedObject.idconst newCartesian = window.viewer.camera.pickEllipsoid(movement.endPosition, window.viewer.scene.globe.ellipsoid)if (Cesium.defined(newCartesian)) {pickedPoint.position = new Cesium.CallbackProperty(() => { // 实时更新点的位置return newCartesian}, false)}}, Cesium.ScreenSpaceEventType.MOUSE_MOVE)}}, Cesium.ScreenSpaceEventType.LEFT_DOWN)// 松开左键 —— 停止拖动handler.setInputAction(() => {handler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE)enableDefaultScreenSpaceEventHandlers() // 允许屏幕移动}, Cesium.ScreenSpaceEventType.LEFT_UP)
}

2. components/CesiumViewer/hooks/utils.ts

// 保持地球不动
export function disableDefaultScreenSpaceEventHandlers() {window.viewer.scene.screenSpaceCameraController.enableRotate = false // 禁止旋转window.viewer.scene.screenSpaceCameraController.enableTranslate = false // 禁止平移window.viewer.scene.screenSpaceCameraController.enableZoom = false // 禁止缩放window.viewer.scene.screenSpaceCameraController.enableTilt = false // 禁止倾斜window.viewer.scene.screenSpaceCameraController.enableLook = false // 禁止观察(自由视角查看)
}// 允许地球移动
export function enableDefaultScreenSpaceEventHandlers() {window.viewer.scene.screenSpaceCameraController.enableRotate = truewindow.viewer.scene.screenSpaceCameraController.enableTranslate = truewindow.viewer.scene.screenSpaceCameraController.enableZoom = truewindow.viewer.scene.screenSpaceCameraController.enableTilt = truewindow.viewer.scene.screenSpaceCameraController.enableLook = true
}

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

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

相关文章

水面巡检船垃圾漂浮物检测系统源码分享

水面巡检船垃圾漂浮物检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of …

在GPU计算型实例中安装Tesla驱动超详细过程

摘要:在深度学习、AI等通用计算业务场景或者OpenGL、Direct3D、云游戏等图形加速场景下,安装了Tesla驱动的GPU才可以发挥高性能计算能力,或提供更流畅的图形显示效果。如果您在创建GPU计算型实例(Linux)时未同时安装Te…

Linux服务器安装Anaconda环境

Linux浪潮云服务器安装Anaconda环境 读研之后在导师的帮助下,获得了浪潮的一台公共云服务器。以后做实验跑代码就可以使用云服务器上的虚拟环境了。减少了自己笔记本的压力。在创建并保存完成镜像环境之后。最重要的就是安装好深度学习需要的Anaconda环境&#xff0…

“类型名称”在Go语言规范中的演变

Go语言规范(The Go Programming Language Specification)[1]是Go语言的核心文档,定义了该语言的语法、类型系统和运行时行为。Go语言规范的存在使得开发者在实现Go编译器时可以依赖一致的标准,它确保了语言的稳定性和一致性&#…

linux ip命令使用

大家好&#xff0c;这里是大数据那点事儿&#xff0c;专注于大数据处理、高性能计算&#xff0c;平时也会分享干货、生活点滴感悟&#xff01; <section class"mp_profile_iframe_wrp"><mp-common-profile class"custom_select_card mp_profile_ifram…

python -tkinter

在Button的command绑定中&#xff0c;如果给的一个函数&#xff0c;则表示执行一次。 import tkinter as Tkfrom tkinter import messageboxi 0def myLabel():global root,is Tk.Label(root,text"the import thing is :" )s.pack()root Tk.Tk()def fun1():if mess…

[PICO VR眼镜]眼动追踪串流Unity开发与使用方法,眼动追踪打包报错问题解决(Eye Tracking/手势跟踪)

前言 最近在做一个工作需要用到PICO4 Enterprise VR头盔里的眼动追踪功能&#xff0c;但是遇到了如下问题&#xff1a; 在Unity里面没法串流调试眼动追踪功能&#xff0c;根本获取不到Device&#xff0c;只能将整个场景build成APK&#xff0c;安装到头盔里&#xff0c;才能在…

【Python语言初识(五)】

一、文件和异常 在Python中实现文件的读写操作其实非常简单&#xff0c;通过Python内置的open函数&#xff0c;我们可以指定文件名、操作模式、编码信息等来获得操作文件的对象&#xff0c;接下来就可以对文件进行读写操作了。这里所说的操作模式是指要打开什么样的文件&#…

泛型(Java)

1.泛型&#xff1a; 将数据类型作为参数进行传递。(传递的数据类型必须是引用数据类型) 本质是参数化类型。 泛型集合&#xff1a;可以约束集合内的元素类型 典型泛型集合ArrayList<E>、HashMap<K,V> <E>、<K,V>表示该泛型集合中的元素类型泛型集合中的…

计算机视觉学习路线

计算机视觉&#xff08;Computer Vision&#xff09;是计算机科学的一个重要分支&#xff0c;旨在使计算机能够理解和解释视觉数据。以下是一个详细的计算机视觉学习路线&#xff0c;帮你系统地掌握这个领域所需的知识和技能。 1. 基础数学和编程 在深入学习计算机视觉之前&…

数据结构之——单循环链表和双向循环链表

一、单循环链表的奥秘 单循环链表是一种特殊的链表结构&#xff0c;它在数据结构领域中具有重要的地位。其独特的循环特性使得它在某些特定的应用场景中表现出强大的优势。 &#xff08;一&#xff09;结构与初始化 单循环链表的结构由节点组成&#xff0c;每个节点包含数据域…

343.整数拆分

刷题刷题找工作&#xff01; 题目链接 DP入门之整数拆分&#xff01; 题目&#xff1a; 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 自己的思路 。。…

引入Scrum激发研发体系活力

引言 在当今快速变化的技术环境中&#xff0c;IT企业面临着持续的市场压力和竞争&#xff0c;传统的瀑布式开发模式已经难以满足现代企业的需要。瀑布模型过于僵化&#xff0c;缺乏灵活性&#xff0c;导致项目经常延期&#xff0c;成本增加&#xff0c;最终可能无法达到预期效果…

bert系列模型区别(bert-base-cased/bert-base-uncased/bert-base-chinese)

文章目录 BERT模型介绍bert-base-casedbert-base-uncasedbert-base-chineseBERT-BILSTM-CRF模型介绍模型下载地址BERT模型介绍 BERT(Bidirectional Encoder Representations from Transformers)是一种预训练的语言模型,由Google开发并于2018年发布。BERT的目标是通过将大量…

【Qualcomm】高通SNPE框架的使用 | 原始模型转换为量化的DLC文件 | 在Android的DSP端运行模型

目录 ① 激活snpe环境 ② 设置环境变量 ③ 模型转换 ④ run 首先&#xff0c;默认SNPE工具已经下载并且Setup相关工作均已完成。同时&#xff0c;拥有原始模型文件&#xff0c;本文使用的模型文件为SNPE 框架示例的inception_v3_2016_08_28_frozen.pb文件。image_file_list…

数据集-目标检测系列-口罩检测数据集 mask>> DataBall

数据集-目标检测系列-口罩检测数据集 mask>> DataBall 数据集-目标检测系列-口罩检测数据集 mask 数据量&#xff1a;1W DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;享有百种数据集&#xff0c;持续增加中。 数据项目地址&#xff1a; gitcode: https…

【Python报错已解决】TypeError: list indices must be integers or slices, not str

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

Linux中通过cgroups限制进程的资源

文章目录 1. 安装和配置cgroups 2. 创建cgroup 3. 设置资源限制 1&#xff09;CPU限制 2&#xff09;内存限制 4. 将Java进程加入到cgroup 5. 监控cgroup 在Linux系统中&#xff0c;cgroups&#xff08;Control Groups&#xff09;是一种可以对一组进程进行细粒度资源控…

打造同城O2O平台:外卖跑腿APP的架构与功能设计详解

今天&#xff0c;小编将于大家共同讨论外卖跑腿APP的架构设计及其核心功能&#xff0c;旨在为开发者提供一份详尽的参考。 一、外卖跑腿APP的架构设计 1.整体架构概述 通常包括前端、后端和数据库。 2.前端设计 用户端提供直观的界面&#xff0c;方便用户下单、查询订单状态…

初学51单片机之I2C总线与E2PROM

首先先推荐B站的I2C相关的视频I2C入门第一节-I2C的基本工作原理_哔哩哔哩_bilibili 看完视频估计就大概知道怎么操作I2C了&#xff0c;他的LCD1602讲的也很不错&#xff0c;把数据建立tsp和数据保持thd&#xff0c;比喻成拍照时候的摆pose和按快门两个过程&#xff0c;感觉还是…