cesium 飞行

本文详细介绍了如何使用Cesium库创建飞行动画效果,通过设置视点的位置和方向,实现从一个地理位置平滑地飞向另一个位置。内容包括Cesium的基本用法、视图控制、时间和动态更新等关键知识点。
摘要由CSDN通过智能技术生成
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>三维飞行</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://cesiumjs.org/releases/1.58/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
    <script src="https://cesiumjs.org/releases/1.58/Build/Cesium/Cesium.js"></script>
    <style>
            html,body
            {
    
                width:100%;
                height:100%;
                padding:0;
                margin:0
            }
        </style>
</head>
<body>
    <div id = "cesium_container" style="width:100%;height:100%;">
    </div>
    <div id="fly_operator_container" style="position:absolute;z-index:9;top:10px;left:10px;">
        <button onclick="initFly()">初始化</button>
        <button onclick="startFly()"
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Cesium飞行的方法和步骤: 1.引入Cesium库和相关依赖库 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Cesium飞行漫游</title> <script src="https://cesium.com/downloads/cesiumjs/releases/1.83/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesium.com/downloads/cesiumjs/releases/1.83/Build/Cesium/Widgets/widgets.css"> <style> #cesiumContainer { width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden; } </style> </head> <body> <div id="cesiumContainer"></div> <script src="https://cesium.com/downloads/cesiumjs/releases/1.83/Build/Cesium/Widgets/widgets.js"></script> </body> </html> ``` 2.创建Cesium Viewer对象 ```javascript var viewer = new Cesium.Viewer('cesiumContainer'); ``` 3.创建Cesium Camera对象 ```javascript var camera = viewer.camera; ``` 4.设置相机位置和方向 ```javascript camera.setView({ destination: Cesium.Cartesian3.fromDegrees(116.3,39.9, 10000000), orientation: { heading: Cesium.Math.toRadians(0), pitch: Cesium.Math.toRadians(-90), roll: Cesium.Math.toRadians(0) } }); ``` 5.创建Cesium Clock对象 ```javascript var clock = new Cesium.Clock({ startTime: Cesium.JulianDate.fromIso8601('2021-01-01T00:00:00Z'), currentTime: Cesium.JulianDate.fromIso8601('2021-01-01T00:00:00Z'), stopTime: Cesium.JulianDate.fromIso8601('2021-01-02T00:00:00Z'), clockRange: Cesium.ClockRange.LOOP_STOP, clockStep: Cesium.ClockStep.SYSTEM_CLOCK_MULTIPLIER, multiplier: 1000 }); viewer.clock = clock; ``` 6.创建Cesium Path对象 ```javascript var path = viewer.entities.add({ name: 'Path', path: { resolution: 1, material: new Cesium.PolylineGlowMaterialProperty({ glowPower: 0.1, color: Cesium.Color.YELLOW }), width: 10 } }); ``` 7.设置Cesium Path对象的位置和方向 ```javascript var positions = [ Cesium.Cartesian3.fromDegrees(116.3, 39.9, 10000000), Cesium.Cartesian3.fromDegrees(116.4, 39.9, 10000000), Cesium.Cartesian3.fromDegrees(116.5, 39.9, 10000000), Cesium.Cartesian3.fromDegrees(116.6, 39.9, 10000000) ]; path.position = new Cesium.CallbackProperty(function(time, result) { var position = Cesium.Cartesian3.fromElements(0, 0, 0, result); var timeInSeconds = Cesium.JulianDate.secondsDifference(time, clock.startTime); var index = Math.floor(timeInSeconds / 10) % positions.length; var nextIndex = (index + 1) % positions.length; var timeOffset = (timeInSeconds % 10) / 10; Cesium.Cartesian3.lerp(positions[index], positions[nextIndex], timeOffset, position); return position; }, false); path.orientation = new Cesium.CallbackProperty(function(time, result) { var timeInSeconds = Cesium.JulianDate.secondsDifference(time, clock.startTime); var index = Math.floor(timeInSeconds / 10) % positions.length; var nextIndex = (index + 1) % positions.length; var position = Cesium.Cartesian3.fromElements(0, 0, 0, result); Cesium.Cartesian3.subtract(positions[nextIndex], positions[index], position); Cesium.Matrix4.fromTranslationQuaternionRotationScale( Cesium.Cartesian3.ZERO, Cesium.Quaternion.IDENTITY, Cesium.Cartesian3.UNIT_SCALE, result ); return result; }, false); ``` 8.创建Cesium Viewer的控制面板 ```javascript var toolbar = new Cesium.Toolbar(viewer.container); toolbar.addDefaultActions(Cesium.viewerCesiumNavigationMixin); ``` 9.实现Cesium Viewer的控制面板功能 ```javascript // 开始飞行 viewer.clock.shouldAnimate = true; // 暂停飞行 viewer.clock.shouldAnimate = false; // 向前飞行 viewer.clock.multiplier *= 2; // 向后飞行 viewer.clock.multiplier /= 2; // 设定路线 positions = [ Cesium.Cartesian3.fromDegrees(116.3, 39.9, 10000000), Cesium.Cartesian3.fromDegrees(116.4, 39.9, 10000000), Cesium.Cartesian3.fromDegrees(116.5, 39.9, 10000000), Cesium.Cartesian3.fromDegrees(116.6, 39.9, 10000000) ]; path.position.setCallback(function(time, result) { var position = Cesium.Cartesian3.fromElements(0, 0, 0, result); var timeInSeconds = Cesium.JulianDate.secondsDifference(time, clock.startTime); var index = Math.floor(timeInSeconds / 10) % positions.length; var nextIndex = (index + 1) % positions.length; var timeOffset = (timeInSeconds % 10) / 10; Cesium.Cartesian3.lerp(positions[index], positions[nextIndex], timeOffset, position); return position; }, false); // 保存路线 var positionsJson = JSON.stringify(positions); // 清空路线 positions = []; path.position.setCallback(function(time, result) { return Cesium.Cartesian3.ZERO; }, false); // 退出飞行 viewer.destroy(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值