Cesium 视角切换功能全解析「10 分钟掌握 Cesium 视角切换」

Cesium视角切换全解析

🚀 个人简介:某大型测绘遥感企业资深Webgis开发工程师,软件设计师(中级)、优快云优质创作者
💟 作 者:柳晓黑胡椒❣️
📝 专 栏:再识Cesium
🌈 若有帮助,还请关注点赞收藏,不行的话我再努努力💪💪💪

本文基于 Cesium 1.132 版本进行演示,其他版本在 API 上可能略有不同。

本文整理了常见的五大类切换方式,配合示例代码,你可以在实际项目中直接使用或二次封装,提升开发效率。
✨ 欢迎大家在评论区提出建议或交流心得,如果需要完整源码,可以私聊我获取。
cesium

Cesium 的视角切换是什么

Cesium 的视角切换是指通过相机(Camera)、实体(Entity)、瓦片(3DTiles)等对象的方法,来实现地球缩放、定位、跟踪、旋转等动态效果。它本质上是对 相机位置(Camera Position) 和 方向(Orientation) 的控制,从而让用户快速切换到不同的空间位置与观察角度。

Cesium 的视角切换的优点

  1. 交互直观:用户能快速聚焦到目标区域,减少手动操作。
  2. 增强体验:飞行动画和跟踪效果,让地图更有沉浸感。
  3. 业务友好:结合按钮、菜单、业务逻辑,可以一键跳转到目标位置,提升效率。
  4. 功能丰富:支持瞬间切换、平滑过渡、跟随跟踪等多种方式,满足不同需求。

方案与代码展示

一、地球

旋转入场动画

旋转入场动画可以增强地图进入时的视觉效果

const flyAnimation = () => {
  const flycenter = {x: 114.387137, y: 30.551429, z: 1e4}
  viewer.camera.setView({destination: Cesium.Cartesian3.fromDegrees(flycenter.x, flycenter.y, 23000000)});
  viewer.camera.flyTo({
    destination: Cesium.Cartesian3.fromDegrees(flycenter.x, flycenter.y, 15000000), // 设置位置
    duration: 3, // 设置飞行持续时间,默认会根据距离来计算
    flyOverLongitude: 117, // 如果到达目的地有2种方式,设置具体值后会强制选择方向飞过这个经度
    complete: () => viewer.camera.flyTo({
      destination: Cesium.Cartesian3.fromDegrees(flycenter.x, flycenter.y, flycenter.z), // 设置位置
      orientation: {
        heading: Cesium.Math.toRadians(0),
        pitch: Cesium.Math.toRadians(-90),
        roll: Cesium.Math.toRadians(0),
      },
      duration: 2,
      easingFunction: Cesium.EasingFunction.LINEAR_NONE,
      complete: () => 1
    })
  });
}

重置主视图

重置视图可以快速回到初始主界面(viewer 定义的视角)

viewer.camera.flyHome(1)

在这里插入图片描述

二、相机

zoomIn

zoomIn 用于相机快速放大

viewer.camera.zoomIn(1000)

在这里插入图片描述

zoomOut

zoomIn 用于相机快速缩小

viewer.camera.zoomOut(1000)

在这里插入图片描述

三、经纬度定位

setView(瞬间定位)

setView 可以瞬间切换到指定经纬度

viewer.camera.setView({
 destination: Cesium.Cartesian3.fromDegrees(114.347137, 30.541429, 2 * 1e4),
  orientation: {
    heading: Cesium.Math.toRadians(0),
    pitch: Cesium.Math.toRadians(-90),
    roll: Cesium.Math.toRadians(0)
  },
})

在这里插入图片描述

flyTo(飞行动画定位)

flyTo 可以平滑飞行到目标位置

viewer.camera.flyTo({
  destination: Cesium.Cartesian3.fromDegrees(114.347137, 30.541429, 2 * 1e4),
  orientation: {
    heading: Cesium.Math.toRadians(0),
    pitch: Cesium.Math.toRadians(-90),
    roll: Cesium.Math.toRadians(0)
  },
  duration: 2
})

在这里插入图片描述

四、实体

flyTo

飞行到实体位置

viewer.flyTo(entity)

在这里插入图片描述

zoomTo

缩放聚焦到实体范围

viewer.zoomTo(entity)

在这里插入图片描述

实体跟踪1

自动跟随实体位置移动

viewer.trackedEntity = entity

在这里插入图片描述

取消实体跟踪1

停止跟踪实体

viewer.trackedEntity = undefined

实体跟踪2(相机绑定)

相机实时锁定实体

viewer.camera.lookAt(entity.position.getValue(), new Cesium.Cartesian3(0, 0, 1000))

在这里插入图片描述

取消实体跟踪2

解除相机锁定

viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY)

五、瓦片

flyTo

飞行到瓦片范围

viewer.flyTo(tileset)

在这里插入图片描述

zoomTo

缩放聚焦瓦片

viewer.zoomTo(tileset)

在这里插入图片描述

setView

瞬间切换到瓦片中心

viewer.camera.setView({
  destination: tileset.boundingSphere.center,
  orientation: {heading: 0, pitch: -Math.PI / 4, roll: 0}
})

在这里插入图片描述

viewBoundingSphere

相机调整到瓦片包围球范围,理解为一个半球,下层是一个圆,按照其半径画球

viewer.camera.viewBoundingSphere(tileset.boundingSphere, new Cesium.HeadingPitchRange(0, -0.5, 0))

在这里插入图片描述

flyToBoundingSphere

动画飞行到瓦片包围球范围

viewer.camera.flyToBoundingSphere(tileset.boundingSphere, new Cesium.HeadingPitchRange(0, -0.5, 0))

在这里插入图片描述

瓦片跟踪

相机跟随瓦片位置

viewer.camera.lookAt(tileset.boundingSphere.center, new Cesium.Cartesian3(0, 0, 1000))

在这里插入图片描述

取消瓦片跟踪

停止跟随瓦片

viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY)
六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)内容概要:本文档围绕六自由度机械臂的ANN人工神经网络设计展开,详细介绍了正向与逆向运动学求解、正向动力学控制以及基于拉格朗日-欧拉法推导逆向动力学方程的理论与Matlab代码实现过程。文档还涵盖了PINN物理信息神经网络在微分方程求解、主动噪声控制、天线分析、电动汽车调度、储能优化等多个工程与科研领域的应用案例,并提供了丰富的Matlab/Simulink仿真资源和技术支持方向,体现了其在多学科交叉仿真与优化中的综合性价值。; 适合人群:具备一定Matlab编程基础,从事机器人控制、自动化、智能制造、电力系统或相关工程领域研究的科研人员、研究生及工程师。; 使用场景及目标:①掌握六自由度机械臂的运动学与动力学建模方法;②学习人工神经网络在复杂非线性系统控制中的应用;③借助Matlab实现动力学方程推导与仿真验证;④拓展至路径规划、优化调度、信号处理等相关课题的研究与复现。; 阅读建议:建议按目录顺序系统学习,重点关注机械臂建模与神经网络控制部分的代码实现,结合提供的网盘资源进行实践操作,并参考文中列举的优化算法与仿真方法拓展自身研究思路。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳晓黑胡椒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值