实时获取三维地图相机角度,改变三维观赏角度

html 界面加个按钮,点击事件,和下面方法关联起来就可以了。

/**
 * 获取当前场景的相机视角参数
 * 20190929 niuliting
 */
function getCurrentExtent() {
    // 范围对象
    var extent = {};
    // 得到当前三维场景
    var scene = viewer.scene;
    // 得到当前三维场景的椭球体
    var ellipsoid = scene.globe.ellipsoid;
    var canvas = scene.canvas;
    // canvas左上角
    var car3_lt = viewer.camera.pickEllipsoid(new Cesium.Cartesian2(0, 0),
            ellipsoid);
    // canvas右下角
    var car3_rb = viewer.camera.pickEllipsoid(new Cesium.Cartesian2(
            canvas.width, canvas.height), ellipsoid);
    // 当canvas左上角和右下角全部在椭球体上
    if (car3_lt && car3_rb) {
        var carto_lt = ellipsoid.cartesianToCartographic(car3_lt);
        var carto_rb = ellipsoid.cartesianToCartographic(car3_rb);
        extent.xmin = Cesium.Math.toDegrees(carto_lt.longitude);
        extent.ymax = Cesium.Math.toDegrees(carto_lt.latitude);
        extent.xmax = Cesium.Math.toDegrees(carto_rb.longitude);
        extent.ymin = Cesium.Math.toDegrees(carto_rb.latitude);
    }
    // 当canvas左上角不在但右下角在椭球体上
    else if (!car3_lt && car3_rb) {
        var car3_lt2 = null;
        var yIndex = 0;
        do {
            // 这里每次10像素递加,一是10像素相差不大,二是为了提高程序运行效率
            yIndex <= canvas.height ? yIndex += 10 : canvas.height;
            car3_lt2 = viewer.camera.pickEllipsoid(new Cesium.Cartesian2(0,
                    yIndex), ellipsoid);
        } while (!car3_lt2);
        var carto_lt2 = ellipsoid.cartesianToCartographic(car3_lt2);
        var carto_rb2 = ellipsoid.cartesianToCartographic(car3_rb);
        extent.xmax = Cesium.Math.toDegrees(carto_lt2.longitude);
        extent.ymax = Cesium.Math.toDegrees(carto_lt2.latitude);
        extent.xmin = Cesium.Math.toDegrees(carto_rb2.longitude);
        extent.ymin = Cesium.Math.toDegrees(carto_rb2.latitude);
    }
    // 获取高度
    extent.height = Math.ceil(viewer.camera.positionCartographic.height);
    extent.lon = Cesium.Math
            .toDegrees(viewer.camera.positionCartographic.longitude);
    extent.lat = Cesium.Math
            .toDegrees(viewer.camera.positionCartographic.latitude);
    extent.heading = Cesium.Math.toDegrees(viewer.camera.heading);
    extent.pitch = Cesium.Math.toDegrees(viewer.camera.pitch);
    extent.roll = Cesium.Math.toDegrees(viewer.camera.roll);
    //console.log("lon:"+extent.lon+"--lat:"+extent.lat+"--height:"+extent.height+"--heading:" + extent.heading + "--pitch:" + extent.pitch
            //+ "--roll:" + extent.roll);
    //console.log('{"lon":"'+extent.lon+'","lat":"'+extent.lat+'","height":"'+extent.height+'","heading":"'+extent.heading+'","pitch":"'+extent.pitch+'","roll":"'+extent.roll+'"}');
    console.log("{'lon':"+extent.lon+",'lat':"+extent.lat+",'height':"+extent.height+",'heading':"+extent.heading+",'pitch':"+extent.pitch+",'roll':"+extent.roll+"}");
    
    return extent;
} 
 

 

posted @ 2020-05-25 10:02  万里哥  阅读(658)  评论(0编辑  收藏  举报