Cesium 系列2 - 默认位置设置及二三维切换定位问题解决

本文详细介绍了在Cesium中实现地图二三维模式切换的方法,包括去除切换动画保持位置不变的技巧,以及如何自定义UI进行二三维切换。同时,提供了设置初始视点和自定义Home按钮行为的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,显示二三维切换按钮

SceneModePicker:true

2.设置初始视点:

var extend= Cesium.Rectangle.fromDegrees(100, 10, 120, 70);
Cesium.Camera.DEFAULT_VIEW_RECTANGLE = extend;
Cesium.Camera.DEFAULT_VIEW_FACTOR =0

3.二三维切换定位问题

 点击二三维切换按钮时候,切换了会显示一个大图,并没有回到原来的位置上去,如下图:

解决方法1:

  viewer.sceneModePicker.viewModel.duration = 0.0;//去掉二三维切换动画效果

  设置这个参数,二三维切换的时候位置就会保持原来的了

原理:  cesium底层的代码做了一个判断,如果延时参数大于0,就缩放到全球显示一个切换动画,设成0就没这个动画了

解决方法2:

   切换二三维的自己做UI,调用底层的代码切换,都可以实现切换二三维

4.初始定位:

var boundingSphere = new Cesium.BoundingSphere(Cesium.Cartesian3.fromDegrees(116.4, 39.9, 100), 15000);
 
// Override behavior of home button
viewer.homeButton.viewModel.command.beforeExecute.addEventListener(function(commandInfo) {
    // Fly to custom position
    viewer.camera.flyToBoundingSphere(boundingSphere);

    // Tell the home button not to do anything
    commandInfo.cancel = true;
});

// Set custom initial position
viewer.camera.flyToBoundingSphere(boundingSphere, {duration: 0});

还有其他解决方法请留言哦,在此记录希望能够帮到你

将不定期更新资源,欢迎持续关注


想获得更多的学习知识请关注微信公众号:西北码农或扫下方二维码

### Cesium 中实现漫游视角切换的方法 在 Cesium 中,可以通过 `viewer.camera` 对象来控制视角的移动和切换。具体来说,有两种主要方法用于实现漫游视角切换:`setView()` 和 `flyTo()`。 #### 方法一:使用 `setView()` `setView()` 是一种快速定位到指定位置的方式,它会立即跳转到目标视角而不会有任何过渡动画效果。以下是其基本语法: ```javascript viewer.camera.setView({ destination : Cesium.Cartesian3.fromDegrees(longitude, latitude, height), // 设置目标经纬度和高度 orientation : { // 定义相机的方向 heading : Cesium.Math.toRadians(0.0), // 方向角 (绕Z轴旋转角度) pitch : CEPROMath.toRadians(-90.0), // 倾斜角 (绕X轴旋转角度) roll : 0.0 // 滚动角 (绕Y轴旋转角度),通常设为0 } }); ``` 此方法适用于需要瞬间改变视角的情况[^1]。 #### 方法二:使用 `flyTo()` 相比 `setView()` 的瞬切方式,`flyTo()` 提供了一个更加流畅自然的飞行动画体验。通过该方法可以让摄像机从当前位置平稳地移动至新的目的地。下面是一个简单的例子展示如何利用 `flyTo()` 来创建平滑的视角转换: ```javascript const position = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883, 500); // 经纬度及高度定义新地点 viewer.camera.flyTo({ destination : position, duration : 5, // 动画持续时间(秒) maximumHeight : undefined, // 可选的最大飞行高度,默认无上限 endTransform : viewer.scene.transform, // 到达终点后的变换矩阵,默认保持不变 complete : function () { console.log('Fly animation completed.'); } // 当动画完成时执行回调函数 }); ``` 值得注意的是,虽然 `flyTo()` 支持自定义一些参数比如持续时间和结束动作等,但它并不支持直接设定飞行速度这一特性[^2][^3]。 以上两种技术都可以用来构建不同风格的地图浏览交互应用,在实际开发过程中可以根据项目需求灵活选用合适的方案。 ### 示例综合代码 为了更直观理解这两种操作的区别,这里给出一段包含两者使用的完整示例程序: ```javascript // 初始化Viewer实例 var viewer = new Cesium.Viewer('cesiumContainer'); function switchPerspectiveUsingSetView(){ var targetPosition = Cesium.Cartesian3.fromDegrees(-122.4194, 37.7749, 1000); viewer.camera.setView({ destination : targetPosition , orientation : { heading : Cesium.Math.toRadians(0), pitch : Cesium.Math.toRadians(-90), roll : 0.0 } }); } function flyWithAnimation(){ const newPosition = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883, 500); viewer.camera.flyTo({ destination : newPosition, duration : 5 }); } ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值