Cesium 的各种定位方法汇总——未完待续

复制代码

 

/*
 * @Author: 苹果园dog
 * @Date: 2020-10-31 21:50:33
 * @LastEditTime: 2020-11-05 23:06:14
 * @LastEditors: Please set LastEditors
 * @Description: Cesium 的各种定位方法汇总,只列出项目中经常使用的,如果不够灵活,可直接调用Cesium官方API,也很方便。
 * Cesium的定位从效果上包含两种:直接定位、飞行定位。在方法封装上,本狗姑且将直接定位分类为zoomTo系列,飞行定位分类flyTo。
 * 定位的对象上包括:坐标点、矩形范围、entities、3dtiles、gltf、kml、geojson、影像、地形、geometry 
 * Cesium的定位主要是使用Camera对象和Viewer对象,Viewer的定位zoomTo,flyTo等方法是较高级别的函数,可以定位到Entity、3dtiles、DataSource等添加到三维球上显示的实体,
 * Viewer的定位方法内部都是调用Camera的相关定位方法,针对不同的定位对象,通过一些列计算得出传入实体的合适定位范围和摄像机视角,然后定位,使用起来很方便。
 * Camera的flyTo、flyToBoundingSphere、lookat、setView等方法是较低级别函数,通过定位坐标和角度参数的传入,精细化控制定位视角,灵活。
 * @FilePath: \web\cesiumS\cesium\cesium\mytest\朝花夕拾\定位\cesiumLocateUtil.js
 */
var cesiumLocateUtil = {
    zoomTo: {

    },
    flyTo: {
        /**
         * @description: 飞行定位到一个笛卡尔空间直角坐标点位置
         * @param {Cartesian3} destination 目标点 Cartesian3
         * @param {Number} heading  默认=0.0   偏航角 正北,由正北向东偏向为正
         * @param {*} pitch  =-90     俯仰角 垂直向下, ENU局部坐标系中XY平面的旋转角度,平面下为负,上为正,
         * @param {*} range    =0.0   距目标点距离
         * @param {*} duration =3   持续时间
         * @param {*} callBack =null   回调函数,定位完成后执行
         */
        flyToPoint: function (destination, heading = 0.0, pitch = -90, range = 0.0, duration = 3, callBack = null) {
            if (!viewer) {
                console.log('三维球未初始化!');
                return;
            }
            if (!destination) {
                console.log('定位目标点不对!');
                return;
            }
            var boundingSphere = new Cesium.BoundingSphere(destination, 0.0);
            viewer.camera.flyToBoundingSphere(boundingSphere, {
                duration: duration,
                maximumHeight: undefined,
                complete: function () {
                    if (callBack) {
                        callBack();
                    }else{
                        console.log('定位失败!');
                    }
                },
                cancel: function () {
                    console.log('定位取消!');
                },
                offset: {
                    heading: Cesium.Math.toRadians(heading),
                    pitch: Cesium.Math.toRadians(pitch),
                    range: range
                },
            });

        },

        /**
         * @description: 飞行定位到一个矩形
         * @param {Array.} cartesians 笛卡尔坐标数组 Array.
         * @param {Number} heading  =0.0   偏航角 正北,由正北向东偏向为正
         * @param {*} pitch  =-90     俯仰角  =-90 ENU局部坐标系,XY平面的旋转角度,平面下为负,上为正,
         * @param {*} scale    =1.0   范围缩放倍率
         * @param {*} duration =3   持续时间
         * @param {*} callBack =null   回调函数,定位完成后执行
         * @return {*}
         */
        flyToRectangle: function (cartesians, heading = 0.0, pitch = -90, scale = 1.0, duration = 3, callBack = null) { 
            if (!viewer) {
                console.log('三维球未初始化!');
                return;
            }
            if (!Array.isArray(cartesians)) {
                console.log('定位范围不对!');
                return;
            }         
            if(scale<0.1){
                scale=1.0;
            }  
            var rec = Cesium.Rectangle.fromCartesianArray(cartesians);
            var boundingSphere = Cesium.BoundingSphere.fromRectangle3D(rec);
            boundingSphere.radius=boundingSphere.radius*scale;
            viewer.camera.flyToBoundingSphere(boundingSphere, {
                duration: duration,
                maximumHeight: undefined,
                complete: function () {
                    if (callBack) {
                        callBack();
                    }else{
                        console.log('定位失败!');
                    }
                },
                cancel: function () {
                    console.log('定位取消!');
                },
                offset: {
                    heading: Cesium.Math.toRadians(heading),
                    pitch: Cesium.Math.toRadians(pitch),
                    range: 0.0
                }
            });
        },

        flyToEntity(entity,){

        }
    }

}

复制代码

测试

复制代码






    
    
    朝花夕拾——定位
    
    
    
    
    
    
    
    



    

Loading...

复制代码

 Cesium 的各种定位方法汇总——未完待续_第1张图片

你可能感兴趣的:(Cesium,javascript)