使用cesium + earthSDK获取相机位置以及绕点飞行(围绕一个点旋转)
文章目录
今天在开发的过程中,需要使用cesium 和earthSDK 的API实现绕点飞行,最开始的思路是,不断获取相机的位置,然后改变相机位置,当然这是弯路,这里还是说一下获取相机位置及参数的一些方法。
一.首先利用ellipsoid来找相机的高度
// 获取摄像机位置世界坐标
//获取相机位置
var cartesian3 = viewer.camera.position;
//获取ellipsoid
var ellipsoid = viewer.scene.globe.ellipsoid;
//获取cartographic
var cartographic = ellipsoid.cartesianToCartographic(cartesian3);
// 经度:
var lng = Cesium.Math.toDegrees(cartographic.longitude);
// 纬度:
var lat = Cesium.Math.toDegrees(cartographic.latitude);
// 高度:
var alt = cartographic.height;
// 指向
let heading = Cesium.Math.toDegrees(viewer.camera.heading);
// 视角
let pitch = Cesium.Math.toDegrees(viewer.camera.pitch);
// 旋转
let roll = Cesium.Math.toDegrees(viewer.camera.roll);
二.其次使用viewer.camera来获取相机的一些信息:
// 经度:
var lng = viewer.camera.positionCartographic.longitude;
// 纬度:
var lat = viewer.camera.positionCartographic.latitude;
// 高度:
var alt = viewer.camera.positionCartographic.height;
// 指向
let heading = Cesium.Math.toDegrees(viewer.camera.heading);
// 视角
let pitch = Cesium.Math.toDegrees(viewer.camera.pitch);
// 旋转
let roll = Cesium.Math.toDegrees(viewer.camera.roll);
注意这里在固定点的时候两个得到的经纬度以及高度是一致的,但是当相机运动之后,得到的数据就会相差很大如下:
这是固定点:
这是相机运动一段时间后:
后一种针对相机的方法能够准确的获取相机的位置,在使用的时候尤其要注意。
三.实现绕点飞行(绕点旋转)
earthSDK的绕点飞行函数及对应参数:
earth.camera.flyAround([2.0991, 0.5497211, 0], 5000, [
0,
-0.3,
0,
],1)
earthSDK飞到某一点:
// 相机直接飞向北京(116.39, 39.9)的位置,高度100米的目标,再距离目标点1000米的距离停下来,此时目标点刚好位置屏幕中心位置。
// 同时相机的方向是正东向,向下倾斜30度。
// 相机方向是这样的 朝北是0度,朝东是90度,朝南是180度,朝西是270度。抬头看天的俯仰角是90度,俯视地面是-90度。
earth.camera.flyTo([116.39*Math.PI/180, 39.9*Math.PI/180, 100], 1000, [90*Math.PI/180, -30*Math.PI/180, 0]);
效果: