方案论证项目分析

news2024/11/16 13:26:52

文章目录

  • 1. 介绍
  • 2. 分析
    • 2.1. 场景加载
    • 2.2. 地形平压
    • 2.3. 模型放置
    • 2.4. 绘制区域
    • 2.5. 查看方案
    • 2.6. 数据库的字段
    • 2.7. 接口
  • 3. 难点
    • 3.1. 调整模型的位置
    • 3.2. 旋转

1. 介绍

这是一个涉及Cesium.js(一个用于Web的3D地球和地图的JavaScript库)和前后端交互的复杂项目。项目的主要功能包括地形平压、模型放置和调整、方案保存和查看等。

2. 分析

2.1. 场景加载

加载Cesium的Melbourne Photogrammetry的倾斜摄影作为底图,本身是贴地的,使用Cesium的primitives功能加载特定ID的数据集。

2.2. 地形平压

  • 激活画笔工具,用户可在地图上绘制多边形区域。
  • 绘制完成后,所选区域的地形将被“平压”,即该区域的地形高度将被统一至某一水平面,视觉效果变为类似水泥的平坦表面。
  • 平压操作完成后,系统将显示平压区域的坐标范围以及平压后的高度信息。

2.3. 模型放置

  • 预设三维模型库,包括购物商城、L型办公楼、政务大楼、教学楼等,模型默认尺寸用0.001
  • 用户选择模型后,激活画笔工具,在地图上绘制放置点。
  • 绘制完成后,系统根据点的坐标将模型放置到对应位置。
  • 提供调整按钮,允许用户对已放置的模型进行旋转、位置移动、放大缩小等操作。
  • 调整完成后,用户可提交方案,输入方案名称并保存至数据库。

2.4. 绘制区域

  • 用户可随时激活画笔工具,重新绘制或修改已存在的平压区域。
  • 系统将实时更新绘制区域的视觉效果和相关信息。

2.5. 查看方案

  • 用户可通过请求获取已添加的方案列表。
  • 点击列表中的方案,系统将跳转到该方案的视角,并移除其他已展示的方案。
  • 用户可方案列表中进行删除操作。
  • 删除方案时,系统将发送删除请求至服务器,并实时更新方案列表。

2.6. 数据库的字段

image-20240625005124296

id:方案的唯一标识符,自增

name:方案名称

src:模型的存放路径,用于在还原方案时获取模型文件

position:模型的坐标信息,支持存储经纬度+高度或笛卡尔坐标。提交方案时存储的坐标格式,在还原时将保持不变,并不会改变你的数据源

tileHeight:压平高度,不是真实模型的高度,是模型坐标系的高度

heading:模型的角度,用于控制模型的旋转方向

scale:模型的尺寸缩放比例

polygon:压平区域的坐标数据,以GeoJSON格式存储

cameraPosition:相机的笛卡尔坐标,记录提交方案时相机的位置信息

cameraOrt:相机视角,提交方案时候的视角

如果你觉得设计的不是很好,可以手动点击获取相机的视角,放到信息卡片上,调整后再进行提交

create_at:方案的创建时间,自动记录方案添加到数据库的时间

delete_at:方案的删除时间,当方案被删除时自动记录时间戳

2.7. 接口

增加

/api/v1/addScheme

传3个number类型,其他都是字符串。

image-20240625011829144

获取(不需要传id)

/api/v1/getScheme

删除(需要传id)

/api/v1/delScheme

3. 难点

3.1. 调整模型的位置

在3D空间中,调整模型位置时容易改变其高度,导致模型悬浮在空中。改变笛卡尔坐标不好调,不管改了哪个轴,高度会发生改变。

原则:无论怎么调整位置,高度都不能发生改变,否则模型就会悬浮在空中。

解决:将笛卡尔坐标转为经纬度,可以按照上北下南左西右东调整,再转为笛卡尔坐标。

另一个bug:当视角刚好是上北下南左西右东时,是没有问题的,如果视角转了一个角度的话,方位就会打乱。

解决:应该是按照屏幕坐标的像素移动,不管哪个方位,都可以实现上下左右移动。

笛卡尔坐标转屏幕坐标,屏幕坐标再转笛卡尔坐标的实现代码:

  // 屏幕转世界坐标
  let pick1 = new Cesium.Cartesian2(0,0)
  let cartesian = viewer.scene.globe.pick(viewer.camera.getPickRay(pick1),viewer.scene);
  // 注意这里的屏幕坐标一定要在球上,否则生成的cartesian对象是undefined

  // 世界坐标转屏幕坐标 (笛卡尔坐标高度为0)
  Cesium.SceneTransforms.wgs84ToWindowCoordinates(scene,Cartesian3)
  // 结果是Cartesian2对象,取出X,Y即为屏幕坐标

3.2. 旋转

鼠标按下去不动一直触发事件,鼠标抬起、按下并释放鼠标和松开鼠标都会取消事件。

实现代码:

app.directive("longpress", {
  mounted: function (el, binding, vNode) {
    // Make sure expression provided is a function
    if (typeof binding.value !== "function" && vNode.context !== undefined) {
      // pass warning to console
      let warn = `[longpress:] provided expression '${binding.expression}' is not a function, but has to be`;

      console.warn(warn);
    }

    // Define variable
    let pressTimer = null;

    // Define funtion handlers
    // Create timeout ( run function after 1s )
    let start = (e) => {
      if (e instanceof MouseEvent && e.type === "click" && e.button !== 0) {
        return;
      }
      handler(e);
    };

    // Cancel Timeout
    let cancel = () => {
      // Check if timer has a value or not
      if (pressTimer !== null) {
        clearTimeout(pressTimer);
        pressTimer = null;
      }
    };
    // Run Function 按下60毫秒触发
    const handler = (e) => {
          pressTimer = setTimeout(() => {
        binding.value(e);
        // 执行递归 调用自身
        handler(e);
      }, 60);
    };

    // Add Event listeners
    el.addEventListener("mousedown", start);
    // Cancel timeouts if this events happen
    el.addEventListener("click", cancel);
    el.addEventListener("mouseup", cancel);
    el.addEventListener("mouseout", cancel);
  },
});

参考文档:在 Vue 中定义一个「长按事件」(in TypeScript)

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

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

相关文章

Reqable抓包工具

今天给大家最近一个好用的Api抓包工具,最重要的是它还是中文版本的 电脑 手机 都可以抓 这是官网地址:https://reqable.com/zh-CN/docs/getting-started/ 进入后我们点击【下载】根据自己电脑需求选择对应版本,我的是window10,选…

LLC开关电源开发:如何使用信号发生器与示波器设计环路

如何使用信号发生器与示波器设计环路 一、主回路二、小信号注入三、LLC 数字环路计算书一、主回路 如下图所示为系统整体架构,包括 LLC 主功率线路,采集线路、RC 滤波线路,DSP 运算。DSP 通过采集由差分运放转化而来的输出电压量(一阶 RC 滤除线路杂波),经数字环路产生特…

中国智能驾驶功能体验及技术方案研究报告

◼ 随着高速NOA功能的落地,用户对于高阶智能驾驶功能的认知被打开。2023年,车企在不断优化高速NOA功能体验的同时,也正在争先推动城市NOA功能的落地。掌握并实现全场景辅助驾驶的技术实力,能够帮助车企在未来的市场竞争中占据主动…

表单prop必填验证根据el-radio-group的值来动态绑定

1、radio的值为5时输入框是必填,其余时候是非必填 2、看图 3、代码 data() {return {optForm:{type:,remark:,},rules:{type:[{ required: true,trigger: change,message:该项为必填项}],remark:[]}};},watch: {"optForm.type"(newVal, oldVal) {this.$…

【scrapy】1.scrapy爬虫入门

一、scrapy爬虫框架 Scrapy 框架是一个基于Twisted的一个异步处理爬虫框架,应用范围非常的广泛,常用于数据采集、网络监测,以及自动化测试等。 scrapy框架包括5个主要的组件: Scheduler:事件调度器,它负…

Unix-privesc-check一键检查 Unix 系统(KALI工具系列三十一)

目录 1、KALI LINUX 简介 2、Unix-privesc-check简介 3、使用对象 4、操作实例 4.1 快速扫描 4.2 检测特定列表 4.3 详细模式 4.4 扫描结果解读 5、总结 1、KALI LINUX 简介 Kali Linux 是一个功能强大、多才多艺的 Linux 发行版 ,广泛用于网络安全社区。它…

小白篇--如何在本地搭建 go环境

前言 Go语言的优势主要体现在其简洁、高效、并发性能、跨平台支持、强大的社区支持以及在云计算和多核CPU时代的高效算子处理能力。 简洁:Go语言的设计哲学是“少即是多”,其遵循简单和清晰的原则,使得代码简洁明了,易于理解和维…

GPT-5智能新纪元的曙光

在美国达特茅斯工程学院周四公布的采访中,OpenAI首席技术官米拉穆拉蒂被问及GPT-5是否会在明年发布,给出了肯定答案并表示将在一年半后发布。穆拉蒂在采访中还把GPT-4到GPT-5的飞跃描述为高中生到博士生的成长。 这一爆炸性的消息,震动了整体…

木材容易发霉怎么办除霉处理方法

木材存放不当就容易出现发霉情况,那么可通过那些方法将木材表面的霉斑除掉呢?经ihaoer防霉人士介绍处理木材发霉处理方法如下: 木材发霉的原因主要包括木材本身的营养物质、环境湿度、温度以及空气流动性等因素。木材中含有蛋白质、淀粉、油类…

SpringBoot优点达项目实战:项目基本配置(二)

SpringBoot优点达项目实战:项目基本配置(二) 文章目录 SpringBoot优点达项目实战:项目基本配置(二)1、项目初始化配置2、MyBatisPlus配置3、Knife配置4、定义统一返回数据结构 1、项目初始化配置 创建appli…

【期末复习】计算机组成原理

海明码 最通俗的海明码计算方法,不需记公式,套步骤即可(可能都不需要理解) https://www.bilibili.com/video/BV1tL4y1h7Fd/ 接上一海明码视频(海明码的纠错) https://www.bilibili.com/video/BV1tf4y1A7NX/…

探索 Screen:一个强大的终端复用工具

在日常的系统管理和开发工作中,我们经常需要同时运行多个终端任务,或者需要在一个终端会话中保持任务的持续运行,即使我们断开了与服务器的连接。这时,screen 命令就成为了一个非常有用的工具。本文将详细介绍 screen 的功能、使用…

二叉树 | Java | LeetCode 235 701 450 做题总结,BST特性、 调整二叉树结构(增+删)

235. 二叉搜索树的最近公共祖先 思路:要利用二叉搜索数的性质。当前遍历节点 cur 的数值大于p q时,说明 p q 的父节点在 cur 的左子树。当前遍历节点 cur 的数值小于p q时,说明 p q 的父节点在 cur 的右子树。当前遍历节点 cur 的数值在 p q…

替代TPS7H1101A-SP抗辐射7V/3A大电流低压差稳压器|具有可并联使用达6A电流

1. 产品特性 ➢ 超低电压输入: 1.5V~7V ➢ 最大输出电流: 3A ➢ 电压精度: 1.25% ➢ 超低压降: 62mV1A(Vout1.8V, 25℃) ➢ 超低噪声: 20.33μVRMS(BW10Hz-100kHz&a…

【Python机器学习】聚类算法的对比与评估——在没有真实值的情况下评估聚类

在实践中,使用诸如ARI之类的指标有一个很大的问题。在应用聚类算法时,通常没有真实值来比较结果。如果我们知道了数据的正确聚类,那么可以使用这一信息构建一个监督模型(比如分类器)。因此,使用类似ARI和NM…

springboot微信点餐小程序-计算机毕业设计源码82910

目 录 摘要 1 绪论 1.1 项目开发背景 1.2目的和意义 1.3springboot框架介绍 2 微信点餐小程序系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 …

AIGC->基于扩散模型的图像生成算法 (课程大纲)

https://edu.csdn.net/course/detail/39618?spm=1001.2014.3001.5507https://edu.csdn.net/course/detail/39618?spm=1001.2014.3001.5507 课程特色是围绕着工作中AIGC文生图的具体用途来对文生图领域进行一个高屋建瓴式的分析,结合具体的应用,尤其是产业界的具体实用场景,…

django图书推荐系统-计算机毕业设计源码89399

摘 要 随着时代的不断更新,社会的不断变换,信息技术的飞速发展,计算机科技技术也逐步走向成熟。图书推荐系统对于当今社会来说是必不可少的一个信息组成部分,它可以管理大量图书、大量读者、让读者有条不紊的进行评分图书&#xf…

ruoyi-vue-plus中使用minio

minio windwos中安装使用: 1、安装 minio下载页面 2、启动:ruoyi-vue-plus: 配置管理:

哈啰集团全面接入通义灵码,AI 生成代码占比 20%,研发提效 12%

6 月 21 日,在阿里云 AI 智领者峰会上海站,哈啰集团算法总监贾立宣布, 哈啰集团已全面接入阿里云通义灵码专属版, 不仅提升了内部研发效率,实现 AI 代码采用率超过 20%,还将灵码接入了哈啰自研 Copilot “海…