首页 / 浏览问题 / 三维GIS / 问题详情
cesium 飞行后保持视角
12EXP 2018年05月24日
camera.flyTo方法。
在飞之前,我调整好了视角,然后飞到A点,默认是飞A点(高5000)后,视角垂直向下

怎么能在飞之后,保持之前的视角。

PS:

如果设置orientation{hedaing\pitch}等,飞过去虽然视角保持住了,但却不是要飞的A点

2 个回答

思路:

1、获取当前相机位置  P1

2、获取屏幕中心点位置 P2

3、计算亮点的经度差和纬度差

4、飞行的目标减去dx、dy

注: 当飞行前后高度变化时,此方法不适用,需另外计算比例。

var p = viewer.camera._positionCartographic
var left = $('#cesiumContainer').offset().left
var top = $('#cesiumContainer').offset().top
var width = parseFloat($('#cesiumContainer').css('width').split('px')[0])
var height = parseFloat($('#cesiumContainer').css('height').split('px')[0])
var x = left + width / 2
var y = top + height / 2
var _center = new Cesium.Cartesian2(x, y);
var __center = viewer.scene.globe.pick(viewer.camera.getPickRay(_center), viewer.scene);
var center = viewer.scene.globe.ellipsoid.cartesianToCartographic(__center);
dx = (center.longitude - p.longitude) / Math.PI * 180
dy = (center.latitude - p.latitude) / Math.PI * 180

var heading = viewer.camera.heading

var pitch = viewer.camera.pitch

var height = p.height

viewer.camera.flyTo({
    destination: Cesium.Cartesian3.fromDegrees(116.4997625442 - dx, 39.9843650681 - dy, height ),
    orientation: {
        heading: heading ,
        pitch: pitch
    }
})
12EXP 2018年05月24日
您好,要飞到指定的位置,使用指定的视角,肯定需要设置位置和视角信息,你说飞过去不是A点是什么情况,必须的话烦请你写个飞行的小demo,传百度云后私信我下载地址,我看看是什么情况(另外怎么判断出不是A点的?是console.log(camera)吗?)
5,985EXP 2018年05月24日
比如,我设置的A点是超图总部,

viewer.entities.add({ //加点

position: Cesium.Cartesian3.fromDegrees(116.4997625442, 39.9843650681),

name: '超图',

point: {

color: Cesium.Color.YELLOW,

pixelSize: 8

}

});

直接

flyto({destination: Cesium.Cartesian3.fromDegrees(116.4997625442, 39.9843650681, 3000),}),

那么飞完后,相机是在超图上方往下看,看到的是超图

----------------------------------------------------------------------------------

如果飞的时候设置了视角信息,

viewer.camera.flyTo({

destination: Cesium.Cartesian3.fromDegrees(116.4997625442, 39.9843650681, 3000),

orientation: {

heading: 4.43456,

pitch: -1.16354

}

})

那么飞完后,是我要的视角,但是看到的位置确实798艺术区了
您好,如果116.4997625442, 39.9843650681该位置位于超图的正上方,你相机飞过去从上往下看,当然能正好看到超图,如果您设置了一定的倾斜角度(pitch)当然可能看到的就是超图周围的地方,比如798。怎么判断飞过去的位置对不对,直接console.log(viewer.camaera),看看参数对不对就知道了。
不好意思,我没表达清楚。

我明白,飞过去之后,camera是在设定位置的正上方,由于设置了水平角、俯仰角。所以看到的是周围的地方。如果我要保持倾斜的视角,看的还是超图,我需要飞的另外的某个位置。

所以,我想问的是 怎么飞过去之后,视角是保持倾斜的,并且看到的还是超图,而不是周围的某个地方。

换句话说,怎么根据当前的camera参数,和目标点坐标,确定需要飞到的位置?
方便加个QQ吗(549314804)

谢谢!
很简单哈,如果你只有一个固定的点,你先飞过去,通过鼠标操作把视角调好(能看到超图又有倾斜角)。这时候通过console.log(viewer.camaera)把当前相机参数输出出来,记录下来。修改程序,将相机的参数修改成刚刚记录的,而不是之前超图正上方的坐标。如果您有很多个点,用viewer.flyTo方法,它会根据目标自动调整视角。

另外我们一般情况不做QQ支持,问题紧急可以直接拨打4008900866
有几千个点,用户不一定会把相机调成什么样子,每次要飞的时候,俯仰角、水平角都不确定,怎么可能去改程序
viewer.flyTo试试这个接口,如果也不满意效果的话,我也就没其他办法了哈,有需求可以给我们研发提出需求
...