尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Cesium 路线导航教程

Cesium 路线导航教程
📅 发布时间:2026/6/21 3:47:13

路线导航 ·Route Nav· ▶ 在线运行案例

  • 案例合集:三维可视化功能案例(threehub.cn)
  • 开源仓库github地址:https://github.com/z2586300277/three-cesium-examples
  • 400个案例代码:网盘链接

你将学到什么

  • Cesium Entity 高层实体 API

效果说明

本案例演示路线导航效果:基于 WebGL 实现「路线导航」可视化效果,附完整可运行源码;核心用到 Cesium。建议先打开文首在线案例查看动态画面,再对照下方源码逐步理解。

核心概念

  • Viewer聚合 Scene、Camera、Clock 与渲染循环,是 Cesium 应用入口。
  • Entity面向点线面/模型/标签的高层 API;与 Primitive 相比更适合交互与属性驱动。
  • 阅读下方完整源码时,建议从init/load/animate三条主线入手,再深入 shader 与工具函数。

实现步骤

  • 创建 Viewer,配置地形/影像(若案例需要)并设置初始相机
  • 在requestAnimationFrame循环中更新状态并 render(Cesium 为viewer.render或自动渲染)
  • 代码要点

    import * as Cesium from 'cesium'

    const box = document.getElementById('box')

    const viewer = new Cesium.Viewer(box, {

    animation: false,//是否创建动画小器件,左下角仪表

    baseLayerPicker: false,//是否显示图层选择器,右上角图层选择按钮

    baseLayer: false, // 不显示默认图层

    fullscreenButton: false,//是否显示全屏按钮,右下角全屏选择按钮

    timeline: false,//是否显示时间轴

    infoBox: false,//是否显示信息框

    })

    const layer = Cesium.ImageryLayer.fromProviderAsync(Cesium.ArcGisMapServerImageryProvider.fromUrl(GLOBAL_CONFIG.getLayerUrl()))

    viewer.imageryLayers.add(layer)

    const list = [ { "longitude": 116.3877535895933, "latitude": 39.917986883763334, "height": 5 }, { "longitude": 116.3879258383737, "latitude": 39.91794008705796, "height": 5 }, { "longitude": 116.38861928968578, "latitude": 39.91781284391525, "height": 5 }, { "longitude": 116.38869191428421, "latitude": 39.91818495388228, "height": 5 } ]

    const cartesianPoints = list.map(item => { const { longitude, latitude, height } = item return Cesium.Cartesian3.fromDegrees(longitude, latitude, height) })

    // CatmullRomSpline 插值 const catmullRomSpline = new Cesium.CatmullRomSpline({ points: cartesianPoints, times: cartesianPoints.map((_, index) => index / (cartesianPoints.length - 1)) })

    const numPoints = 1000 // 插值点数量 const interpolatedPoints = [] for (let i = 0; i < numPoints; i++) { const t = i / (numPoints - 1) const point = catmullRomSpline.evaluate(t) interpolatedPoints.push(point) }

    viewer.entities.add({ name: '路线', polyline: { positions: interpolatedPoints, width: 1, material: Cesium.Color.RED } })

    // 添加无人机 const entity = viewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(list[0].longitude, list[0].latitude, 7), model: { uri: FILE_HOST + '/models/uav.glb' }, viewFrom: new Cesium.Cartesian3(0, -20, 10) // 设置第三人称视角偏移(后方20米,上方10米) }) viewer.trackedEntity = entity // 设置相机跟随飞机

    // 动画 const start = Cesium.JulianDate.fromDate(new Date()) // 设置起始时间 const speedFactor = 50 // 设置速度因子,值越大速度越快 let stop = Cesium.JulianDate.addSeconds(start, interpolatedPoints.length / speedFactor, new Cesium.JulianDate())

    function setProperty(t1, t2) { const property = new Cesium.SampledPositionProperty() for (let i = 0; i < interpolatedPoints.length; i++) property.addSample(Cesium.JulianDate.addSeconds(t1, i / speedFactor, new Cesium.JulianDate()), interpolatedPoints[i]) entity.position = property entity.orientation = new Cesium.VelocityOrientationProperty(property) entity.availability = new Cesium.TimeIntervalCollection([new Cesium.TimeInterval({ start: t1, stop: t2 })]) }

    setProperty(start, stop)

    // 监听飞机的位置属性,当飞机到达终点时重新设置位置属性 viewer.clock.onTick.addEventListener(function (clock) { if (Cesium.JulianDate.compare(clock.currentTime, stop) >= 0) { const newStart = Cesium.JulianDate.clone(stop); stop = Cesium.JulianDate.addSeconds(newStart, interpolatedPoints.length / speedFactor, new Cesium.JulianDate()); setProperty(newStart, stop) } })

    viewer.clock.shouldAnimate = true // 开始动画

    完整源码:GitHub

    小结

    • 本文提供路线导航完整 Cesium.js 源码与在线 Demo,建议先运行案例再改 uniform/参数做二次实验
    • 更多 Cesium.js 实战案例见 three-cesium-examples 合集 与 GitHub 开源仓库

相关新闻

  • 大语言模型因果推理去毒:从CAUSALDETOX原理到本地部署实践
  • ControlFoley:基于动态权重仲裁的视频到音频可控生成框架解析
  • 构建面向全双工对话的生成式奖励模型:从AI裁判到强化学习优化

最新新闻

  • Kimi Work:面向知识工作者的本地化AI工作台与智能体实践指南
  • 手把手教你学Simulink——基于晶闸管(SCR/Thyristor)的三相可控整流器相位控制(α 角控制)仿真
  • Qwen3.7-Max实战指南:长上下文稳定、工具容错与Token精准控制
  • m4s-converter:5秒拯救B站缓存视频的终极指南
  • 本地部署AI知识库:Ollama+DeepSeek+RAG实战指南
  • Ascend 910B集群部署Qwen 3.5-397B-A17B实战指南

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号