liuyg
2021-06-15 d16c4f06f2699b18bfa3b449595868feec9f808b
widgets/FlyRoute/fly.js
@@ -1,423 +1,438 @@
function newSite(x,y,z,h,p,time,ids){
   if(x!=null&&y!=null&&z!=null&&h!=null&&p!=null&&time!=null&&ids!=null){
      this.position_x=x;
      this.position_y=y;
      this.position_z=z;
      this.pitch=p;
      this.heading=h;
      this.time=time;
      this.ids=ids;
   }else{
function newSite(x, y, z, h, p, time, ids) {
   if (x != null && y != null && z != null && h != null && p != null && time != null && ids != null) {
      this.position_x = x;
      this.position_y = y;
      this.position_z = z;
      this.pitch = p;
      this.heading = h;
      this.time = time;
      this.ids = ids;
   } else {
      return false;
   }
}
function Fly_NZC(viewer){
   this.viewer=viewer;
   this.scene=viewer.scene;
   this.entities=viewer.entities;
function Fly_NZC(viewer) {
   this.viewer = viewer;
   this.scene = viewer.scene;
   this.entities = viewer.entities;
   //全部飞行站点数组
   this.allSites=[];
   var that =this;
   this.checkIds=function(ids){
        for(var i=0;i<that.allSites.length+1;i++){
            if(i==that.allSites.length){
                return false;
               break;
            }
          if(that.allSites[i].ids==ids){
              return i;
              break;
          }
       }
   };
   this.RouteCollection={
       //线颜色
       //LineColor:Cesium.Color.WHITE,
       //站点和路线显隐是否开启
       point_show:true,
       line_show:true,
       //站点图片路径
       img_path:"widgets/FlyRoute/images/location4.png",
        //飞行路线颜色
      /* setLineColor:function(){
          Cesium.Color.WHITE,
       },*/
       AddRoute:function(Route){
          this.deleteEntities();
          that.allSites=[];
          for (var i = 0; i < Route.length; i++) {
             let cartesian3 = Cesium.Cartesian3.fromDegrees(Route[i].lgtd, Route[i].lttd, Route[i].height);
             let site = {"ids":Route[i].id,"position_x":cartesian3.x,"position_y":cartesian3.y,"position_z":cartesian3.z,
                      "pitch":Cesium.Math.toRadians(Route[i].pitch),"heading":Cesium.Math.toRadians(Route[i].heading),
                      "roll":Cesium.Math.toRadians(Route[i].roll),"time":Route[i].time};
             that.allSites[i]=site;
          }
            this.controlEntities();
       },
       //设置点图片
       setPointImg:function(path){
          this.img_path=path;
          this.controlEntities();
       },
       //mod=0为设置点的可见,1为设置线的可见,2为控制点和线的可见
       setVisible:function(mod,bool){
           if(mod===0){
              this.point_show=bool;
          }if(mod===1){
              this.line_show=bool;
          }if(mod===2){
              this.point_show=bool;
              this.line_show=bool;
          }
          this.controlEntities();
       },
       //通过传入站点类添加站点
       AddSite:function(newSite){
          //判断id是否重复
          var bool=that.checkIds(newSite.ids);
          if(bool){
                return  false;
          }else{
             var Site = {};
             Site.position_x=newSite.position_x;
             Site.position_y=newSite.position_y;
             Site.position_z=newSite.position_z;
             Site.heading=newSite.heading;
             Site.pitch=newSite.pitch;
             //Site.roll=camera.roll;
             Site.time=newSite.time;
             Site.ids=newSite.ids;
               that.allSites.push(Site);
               this.controlEntities();
               return  true;
           }
       },
       //添加当前视角为站点需要传入id
       AddSiteByView:function (ids) {
          //判断id是否重复
          var bool=that.checkIds(ids);
          if(bool){
                return  false;
          }else{
             try{
                 var position=that.scene.camera.position;
                 //获取当前相机位置参数(飞行用)
                var Site = {};
                 Site.position_x=position.x;
                 Site.position_y=position.y;
                 Site.position_z=position.z;
                 Site.heading=that.scene.camera.heading;
                 Site.pitch=that.scene.camera.pitch;
                 Site.roll=that.scene.camera.roll;
                 Site.time=3;
                 Site.ids=ids;
                 //添加到站点数组
                 that.allSites.push(Site);
                 this.controlEntities();
                 console.log(that.allSites);
                 return  true;
             }catch(e){
                 return  false;
             }
          }
       },
       //根据索引获取站点信息
       getSiteByIndex:function (index) {
          return that.allSites[index];
       },
       deleteEntities:function(){
          //50000+为线id
          for(var i=0;i<that.allSites.length;i++){
               that.entities.removeById(that.allSites[i].ids);
           }
           for(var i=1;i<500000;i++){
               var ids=parseInt(50000+i);
               var entities_del=that.entities.getById(ids);
               if(entities_del){
                       that.entities.remove(entities_del);
               }else{
                   break;
               }
           }
       },
       controlEntities:function(){
          var position_1,position_2,x1,x2,y1,y2,z1,z2,point_1_cartographic,point_2_cartographic;
          //添加和删除站点,更改颜色或图片后,先清空entities,然后重新添加。
           this.deleteEntities();
           //添加显示的站点
             var length=that.allSites.length;
             if(this.point_show==true){
               for(var j=0;j<length;j++){
                  that.entities.add({
                      position : new Cesium.Cartesian3(that.allSites[j].position_x,that.allSites[j].position_y,that.allSites[j].position_z),
                      billboard :{
                          image :this.img_path,
                          width:30,
                          height:40,
                      },
                      //name : 10000+j,
                      id:that.allSites[j].ids
                  });
              }
             }
             //添加显示的线
             if(this.line_show==true){
               for(var j=1;j<length;j++){
                  //将笛卡尔坐标转为经纬度坐标,用于绘制线
                  position_1=new Cesium.Cartesian3(that.allSites[j].position_x,that.allSites[j].position_y,that.allSites[j].position_z)
                  point_1_cartographic = Cesium.Cartographic.fromCartesian(position_1);
                x1 = Cesium.Math.toDegrees(point_1_cartographic.longitude);
                y1 = Cesium.Math.toDegrees(point_1_cartographic.latitude);
                z1 = point_1_cartographic.height;
                position_2=new Cesium.Cartesian3(that.allSites[j-1].position_x,that.allSites[j-1].position_y,that.allSites[j-1].position_z)
                  point_2_cartographic = Cesium.Cartographic.fromCartesian(position_2);
                x2 = Cesium.Math.toDegrees(point_2_cartographic.longitude);
                y2 = Cesium.Math.toDegrees(point_2_cartographic.latitude);
                z2 = point_2_cartographic.height;
                   that.entities.add({
                        id:50000+j,
                      // name : drowallStops.length,
                       polyline : {
                           positions : Cesium.Cartesian3.fromDegreesArrayHeights([x1,y1,z1,x2,y2,z2]),
                           width : 5,
                           material : Cesium.Color.WHITE
                       }
                   });
               }
           }
          //如果关闭显示了站点和飞行路线,添加的新站点和飞行路线将先不显示
          if(this.line_show==false){
                 for(var j=1;j<length;j++){
                    //将笛卡尔坐标转为经纬度坐标,用于绘制线
                  position_1=new Cesium.Cartesian3(that.allSites[j].position_x,that.allSites[j].position_y,that.allSites[j].position_z)
                  point_1_cartographic = Cesium.Cartographic.fromCartesian(position_1);
                x1 = Cesium.Math.toDegrees(point_1_cartographic.longitude);
                y1 = Cesium.Math.toDegrees(point_1_cartographic.latitude);
                z1 = point_1_cartographic.height;
                position_2=new Cesium.Cartesian3(that.allSites[j-1].position_x,that.allSites[j-1].position_y,that.allSites[j-1].position_z)
                  point_2_cartographic = Cesium.Cartographic.fromCartesian(position_2);
                x2 = Cesium.Math.toDegrees(point_2_cartographic.longitude);
                y2 = Cesium.Math.toDegrees(point_2_cartographic.latitude);
                z2 = point_2_cartographic.height;
                   that.entities.add({
                        id:50000+j,
                        show:false,
                      // name : drowallStops.length,
                       polyline : {
                           positions : Cesium.Cartesian3.fromDegreesArrayHeights([x1,y1,z1,x2,y2,z2]),
                           width : 5,
                           material :  Cesium.Color.WHITE
                       }
                   });
               }
          }
          if(this.point_show==false){
               for(var j=0;j<length;j++){
                   that.entities.add({
                    position : new Cesium.Cartesian3(that.allSites[j].position_x,that.allSites[j].position_y,that.allSites[j].position_z),
                    billboard :{
                        image :this.img_path,
                        width:30,
                        height:40,
                    },
                    show:false,
                    //name : 10000+j,
                    id:that.allSites[j].ids
                });
            }
           }
       },
       removeAllSites:function(){
          this.deleteEntities();
          that.allSites=[];
       },
       removeSiteById:function(ids){
          var id=that.checkIds(ids)
          if(id){
             this.deleteEntities();
             that.allSites.splice(id,1);
             this.controlEntities();
          }else{
             return false
          }
       }
    };
   this.l=0;
   this.b=0;
   //用于判断执行的时暂停还是停止
   this.play_bool=true;
   var x,y,z,p,h;
   this.setInterval_fly=null;
    this.setcamera=function(){
        //设置俯仰角
          var set=that.allSites[that.l].time*50
          that.viewer.camera.setView({
              orientation: {
                  heading :viewer.scene.camera.heading+h/set,
                  pitch :viewer.scene.camera.pitch+p/set,
                  roll : 0.0
              }
          });
          //move移动相机
          that.viewer.camera.move(new Cesium.Cartesian3(x,y,z),1/set);
         that.b--;
          if(that.b<=0){
             that.l++;
              clearInterval(that.setInterval_fly);
              that.setInterval_fly=null;
              that.Interval();
             // that.b=0;
          }
    };
   this.Interval=function(){
      var l=that.l;
      if(that.play_bool){
            that.b=that.allSites[l].time*50
      }else{
         that.play_bool=true;
   this.allSites = [];
   var that = this;
   this.checkIds = function (ids) {
      for (var i = 0; i < that.allSites.length + 1; i++) {
         if (i == that.allSites.length) {
            return false;
            break;
         }
         if (that.allSites[i].ids == ids) {
            return i;
            break;
         }
      }
       if(that.allSites[l+1]){
          x=that.allSites[l+1].position_x-that.allSites[l].position_x;
         y=that.allSites[l+1].position_y-that.allSites[l].position_y;
         z=that.allSites[l+1].position_z-that.allSites[l].position_z;
         p=that.allSites[l+1].pitch-that.allSites[l].pitch;
         h=that.allSites[l+1].heading-that.allSites[l].heading;
         var tem = Cesium.Math.toDegrees(that.allSites[l+1].heading) - Cesium.Math.toDegrees(that.allSites[l].heading);
         if(Math.abs(tem)>180){
            if(tem>=0){
               tem = 360 - tem;
   };
   this.RouteCollection = {
      //线颜色
      //LineColor:Cesium.Color.WHITE,
      //站点和路线显隐是否开启
      point_show: true,
      line_show: true,
      //站点图片路径
      img_path: "widgets/FlyRoute/images/location4.png",
      //飞行路线颜色
      /* setLineColor:function(){
          Cesium.Color.WHITE,
       },*/
      AddRoute: function (Route) {
         this.deleteEntities();
         that.allSites = [];
         for (var i = 0; i < Route.length; i++) {
            let cartesian3 = Cesium.Cartesian3.fromDegrees(Route[i].lgtd, Route[i].lttd, Route[i].height);
            let site = {
               "ids": Route[i].id,
               "position_x": cartesian3.x,
               "position_y": cartesian3.y,
               "position_z": cartesian3.z,
               "pitch": Cesium.Math.toRadians(Route[i].pitch),
               "heading": Cesium.Math.toRadians(Route[i].heading),
               "roll": Cesium.Math.toRadians(Route[i].roll),
               "time": Route[i].time
            };
            that.allSites[i] = site;
         }
         this.controlEntities();
      },
      //设置点图片
      setPointImg: function (path) {
         this.img_path = path;
         this.controlEntities();
      },
      //mod=0为设置点的可见,1为设置线的可见,2为控制点和线的可见
      setVisible: function (mod, bool) {
         if (mod === 0) {
            this.point_show = bool;
         }
         if (mod === 1) {
            this.line_show = bool;
         }
         if (mod === 2) {
            this.point_show = bool;
            this.line_show = bool;
         }
         this.controlEntities();
      },
      //通过传入站点类添加站点
      AddSite: function (newSite) {
         //判断id是否重复
         var bool = that.checkIds(newSite.ids);
         if (bool) {
            return false;
         } else {
            var Site = {};
            Site.position_x = newSite.position_x;
            Site.position_y = newSite.position_y;
            Site.position_z = newSite.position_z;
            Site.heading = newSite.heading;
            Site.pitch = newSite.pitch;
            //Site.roll=camera.roll;
            Site.time = newSite.time;
            Site.ids = newSite.ids;
            that.allSites.push(Site);
            this.controlEntities();
            return true;
         }
      },
      //添加当前视角为站点需要传入id
      AddSiteByView: function (ids) {
         //判断id是否重复
         var bool = that.checkIds(ids);
         if (bool) {
            return false;
         } else {
            try {
               var position = that.scene.camera.position;
               //获取当前相机位置参数(飞行用)
               var Site = {};
               Site.position_x = position.x;
               Site.position_y = position.y;
               Site.position_z = position.z;
               Site.heading = that.scene.camera.heading;
               Site.pitch = that.scene.camera.pitch;
               Site.roll = that.scene.camera.roll;
               Site.time = 3;
               Site.ids = ids;
               //添加到站点数组
               that.allSites.push(Site);
               this.controlEntities();
               return true;
            } catch (e) {
               return false;
            }
            else{
         }
      },
      //根据索引获取站点信息
      getSiteByIndex: function (index) {
         return that.allSites[index];
      },
      deleteEntities: function () {
         //50000+为线id
         for (var i = 0; i < that.allSites.length; i++) {
            that.entities.removeById(that.allSites[i].ids);
         }
         for (var i = 1; i < 500000; i++) {
            var ids = parseInt(50000 + i);
            var entities_del = that.entities.getById(ids);
            if (entities_del) {
               that.entities.remove(entities_del);
            } else {
               break;
            }
         }
      },
      controlEntities: function () {
         var position_1, position_2, x1, x2, y1, y2, z1, z2, point_1_cartographic, point_2_cartographic;
         //添加和删除站点,更改颜色或图片后,先清空entities,然后重新添加。
         this.deleteEntities();
         //添加显示的站点
         var length = that.allSites.length;
         if (this.point_show == true) {
            for (var j = 0; j < length; j++) {
               that.entities.add({
                  position: new Cesium.Cartesian3(that.allSites[j].position_x, that.allSites[j].position_y, that.allSites[j].position_z),
                  billboard: {
                     image: this.img_path,
                     width: 30,
                     height: 40,
                  },
                  //name : 10000+j,
                  id: that.allSites[j].ids
               });
            }
         }
         //添加显示的线
         if (this.line_show == true) {
            for (var j = 1; j < length; j++) {
               //将笛卡尔坐标转为经纬度坐标,用于绘制线
               position_1 = new Cesium.Cartesian3(that.allSites[j].position_x, that.allSites[j].position_y, that.allSites[j].position_z)
               point_1_cartographic = Cesium.Cartographic.fromCartesian(position_1);
               x1 = Cesium.Math.toDegrees(point_1_cartographic.longitude);
               y1 = Cesium.Math.toDegrees(point_1_cartographic.latitude);
               z1 = point_1_cartographic.height;
               position_2 = new Cesium.Cartesian3(that.allSites[j - 1].position_x, that.allSites[j - 1].position_y, that.allSites[j - 1].position_z)
               point_2_cartographic = Cesium.Cartographic.fromCartesian(position_2);
               x2 = Cesium.Math.toDegrees(point_2_cartographic.longitude);
               y2 = Cesium.Math.toDegrees(point_2_cartographic.latitude);
               z2 = point_2_cartographic.height;
               that.entities.add({
                  id: 50000 + j,
                  // name : drowallStops.length,
                  polyline: {
                     positions: Cesium.Cartesian3.fromDegreesArrayHeights([x1, y1, z1, x2, y2, z2]),
                     width: 5,
                     material: Cesium.Color.WHITE
                  }
               });
            }
         }
         //如果关闭显示了站点和飞行路线,添加的新站点和飞行路线将先不显示
         if (this.line_show == false) {
            for (var j = 1; j < length; j++) {
               //将笛卡尔坐标转为经纬度坐标,用于绘制线
               position_1 = new Cesium.Cartesian3(that.allSites[j].position_x, that.allSites[j].position_y, that.allSites[j].position_z)
               point_1_cartographic = Cesium.Cartographic.fromCartesian(position_1);
               x1 = Cesium.Math.toDegrees(point_1_cartographic.longitude);
               y1 = Cesium.Math.toDegrees(point_1_cartographic.latitude);
               z1 = point_1_cartographic.height;
               position_2 = new Cesium.Cartesian3(that.allSites[j - 1].position_x, that.allSites[j - 1].position_y, that.allSites[j - 1].position_z)
               point_2_cartographic = Cesium.Cartographic.fromCartesian(position_2);
               x2 = Cesium.Math.toDegrees(point_2_cartographic.longitude);
               y2 = Cesium.Math.toDegrees(point_2_cartographic.latitude);
               z2 = point_2_cartographic.height;
               that.entities.add({
                  id: 50000 + j,
                  show: false,
                  // name : drowallStops.length,
                  polyline: {
                     positions: Cesium.Cartesian3.fromDegreesArrayHeights([x1, y1, z1, x2, y2, z2]),
                     width: 5,
                     material: Cesium.Color.WHITE
                  }
               });
            }
         }
         if (this.point_show == false) {
            for (var j = 0; j < length; j++) {
               that.entities.add({
                  position: new Cesium.Cartesian3(that.allSites[j].position_x, that.allSites[j].position_y, that.allSites[j].position_z),
                  billboard: {
                     image: this.img_path,
                     width: 30,
                     height: 40,
                  },
                  show: false,
                  //name : 10000+j,
                  id: that.allSites[j].ids
               });
            }
         }
      },
      removeAllSites: function () {
         this.deleteEntities();
         that.allSites = [];
      },
      removeSiteById: function (ids) {
         var id = that.checkIds(ids)
         if (id) {
            this.deleteEntities();
            that.allSites.splice(id, 1);
            this.controlEntities();
         } else {
            return false
         }
      }
   };
   this.l = 0;
   this.b = 0;
   //用于判断执行的时暂停还是停止
   this.play_bool = true;
   var x, y, z, p, h;
   this.setInterval_fly = null;
   this.setcamera = function () {
      //设置俯仰角
      var set = that.allSites[that.l].time * 50
      that.viewer.camera.setView({
         orientation: {
            heading: viewer.scene.camera.heading + h / set,
            pitch: viewer.scene.camera.pitch + p / set,
            roll: 0.0
         }
      });
      //move移动相机
      that.viewer.camera.move(new Cesium.Cartesian3(x, y, z), 1 / set);
      that.b--;
      if (that.b <= 0) {
         that.l++;
         clearInterval(that.setInterval_fly);
         that.setInterval_fly = null;
         that.Interval();
         // that.b=0;
      }
   };
   this.Interval = function () {
      var l = that.l;
      if (that.play_bool) {
         that.b = that.allSites[l].time * 50
      } else {
         that.play_bool = true;
      }
      if (that.allSites[l + 1]) {
         x = that.allSites[l + 1].position_x - that.allSites[l].position_x;
         y = that.allSites[l + 1].position_y - that.allSites[l].position_y;
         z = that.allSites[l + 1].position_z - that.allSites[l].position_z;
         p = that.allSites[l + 1].pitch - that.allSites[l].pitch;
         h = that.allSites[l + 1].heading - that.allSites[l].heading;
         var tem = Cesium.Math.toDegrees(that.allSites[l + 1].heading) - Cesium.Math.toDegrees(that.allSites[l].heading);
         if (Math.abs(tem) > 180) {
            if (tem >= 0) {
               tem = 360 - tem;
            } else {
               tem = 360 + tem;
            }
            h = Cesium.Math.toRadians(tem);
         }
         //that.b=that.allSites[l].time*20
          that.setInterval_fly=setInterval(that.setcamera,20);
      }else{
         that.play_bool=true;
         that.l=0;
         that.setInterval_fly = setInterval(that.setcamera, 20);
      } else {
         that.play_bool = true;
         that.l = 0;
         that.scene.screenSpaceCameraController.enableRotate = true;
           that.scene.screenSpaceCameraController.enableTranslate = true;
           that.scene.screenSpaceCameraController.enableZoom = true;
           that.scene.screenSpaceCameraController.enableTilt = true;
           that.scene.screenSpaceCameraController.enableLook = true;
         that.scene.screenSpaceCameraController.enableTranslate = true;
         that.scene.screenSpaceCameraController.enableZoom = true;
         that.scene.screenSpaceCameraController.enableTilt = true;
         that.scene.screenSpaceCameraController.enableLook = true;
      }
   };
   this.flyManager={
   this.flyManager = {
      //用于储存暂停时的位置
      Site_pause:{},
       play:function(){
          //如果之前点的时停止重新开始飞行
          if(that.allSites.length>1){
                that.scene.screenSpaceCameraController.enableRotate = false;
                   that.scene.screenSpaceCameraController.enableTranslate = false;
                   that.scene.screenSpaceCameraController.enableZoom = false;
                   that.scene.screenSpaceCameraController.enableTilt = false;
                   that.scene.screenSpaceCameraController.enableLook = false;
              if(that.play_bool){
                   //设置初始点
                    that.scene.camera.setView({
                       destination : new Cesium.Cartesian3(that.allSites[that.l].position_x,that.allSites[that.l].position_y,that.allSites[that.l].position_z),
                       orientation : {
                           heading : that.allSites[that.l].heading,
                           pitch : that.allSites[that.l].pitch,
                           roll : that.allSites[that.l].roll
                       }
                   });
                   that.Interval();
              }else{
                //如果之前是暂停,继续飞行
                that.scene.camera.setView({
                          //将经度、纬度、高度的坐标转换为笛卡尔坐标
                     destination : new Cesium.Cartesian3(this.Site_pause.position_x,this.Site_pause.position_y,this.Site_pause.position_z),
                     orientation : {
                          heading : this.Site_pause.heading,
                          pitch : this.Site_pause.pitch,
                          roll : this.Site_pause.roll
                      }
                  });
                  that.Interval();
              }
           }
       },
       stop:function(){
          if( that.setInterval_fly!=null){
             clearInterval(that.setInterval_fly);
              that.setInterval_fly=null;
          }
          that.l=0;
          that.play_bool=true;
          that.scene.screenSpaceCameraController.enableRotate = true;
           that.scene.screenSpaceCameraController.enableTranslate = true;
           that.scene.screenSpaceCameraController.enableZoom = true;
           that.scene.screenSpaceCameraController.enableTilt = true;
           that.scene.screenSpaceCameraController.enableLook = true;
       },
       pause:function(){
          if( that.setInterval_fly!=null){
             clearInterval(that.setInterval_fly);
              that.setInterval_fly=null;
              that.play_bool=false;
          }
          //获取暂停时的camera数据
          var position=that.scene.camera.position;
          this.Site_pause.position_x=position.x;
          this.Site_pause.position_y=position.y;
          this.Site_pause.position_z=position.z;
          this.Site_pause.heading=that.scene.camera.heading;
          this.Site_pause.pitch=that.scene.camera.pitch;
          this.Site_pause.roll=that.scene.camera.roll;
      Site_pause: {},
      play: function () {
         //如果之前点的时停止重新开始飞行
         if (that.allSites.length > 1) {
            that.scene.screenSpaceCameraController.enableRotate = false;
            that.scene.screenSpaceCameraController.enableTranslate = false;
            that.scene.screenSpaceCameraController.enableZoom = false;
            that.scene.screenSpaceCameraController.enableTilt = false;
            that.scene.screenSpaceCameraController.enableLook = false;
          that.scene.screenSpaceCameraController.enableRotate = true;
           that.scene.screenSpaceCameraController.enableTranslate = true;
           that.scene.screenSpaceCameraController.enableZoom = true;
           that.scene.screenSpaceCameraController.enableTilt = true;
           that.scene.screenSpaceCameraController.enableLook = true;
       },
       SetStartSite:function(ids){
          var bool=that.checkIds(ids);
          if(bool){
                that.l=bool;
                return true;
          }else{
             return false;
          }
            if (that.play_bool) {
               //设置初始点
               that.scene.camera.setView({
                  destination: new Cesium.Cartesian3(that.allSites[that.l].position_x, that.allSites[that.l].position_y, that.allSites[that.l].position_z),
                  orientation: {
                     heading: that.allSites[that.l].heading,
                     pitch: that.allSites[that.l].pitch,
                     roll: that.allSites[that.l].roll
                  }
               });
               if (that.setInterval_fly) {
                  clearInterval(that.setInterval_fly);
               }
               that.Interval();
       },
       viewToSite:function(site){
          that.scene.camera.setView({
              destination : new Cesium.Cartesian3(site.position_x,site.position_y,site.position_z),
              orientation : {
                  heading : site.heading,
                  pitch : site.pitch,
                  roll : site.roll
               }
            });
            } else {
               //如果之前是暂停,继续飞行
               that.scene.camera.setView({
                  //将经度、纬度、高度的坐标转换为笛卡尔坐标
                  destination: new Cesium.Cartesian3(this.Site_pause.position_x, this.Site_pause.position_y, this.Site_pause.position_z),
                  orientation: {
                     heading: this.Site_pause.heading,
                     pitch: this.Site_pause.pitch,
                     roll: this.Site_pause.roll
                  }
               });
       }
               that.Interval();
            }
         }
      },
      stop: function () {
         if (that.setInterval_fly != null) {
            clearInterval(that.setInterval_fly);
            that.setInterval_fly = null;
         }
         that.l = 0;
         that.play_bool = true;
         that.scene.screenSpaceCameraController.enableRotate = true;
         that.scene.screenSpaceCameraController.enableTranslate = true;
         that.scene.screenSpaceCameraController.enableZoom = true;
         that.scene.screenSpaceCameraController.enableTilt = true;
         that.scene.screenSpaceCameraController.enableLook = true;
      },
      pause: function () {
         if (that.setInterval_fly != null) {
            clearInterval(that.setInterval_fly);
            that.setInterval_fly = null;
            that.play_bool = false;
         }
         //获取暂停时的camera数据
         var position = that.scene.camera.position;
         this.Site_pause.position_x = position.x;
         this.Site_pause.position_y = position.y;
         this.Site_pause.position_z = position.z;
         this.Site_pause.heading = that.scene.camera.heading;
         this.Site_pause.pitch = that.scene.camera.pitch;
         this.Site_pause.roll = that.scene.camera.roll;
         that.scene.screenSpaceCameraController.enableRotate = true;
         that.scene.screenSpaceCameraController.enableTranslate = true;
         that.scene.screenSpaceCameraController.enableZoom = true;
         that.scene.screenSpaceCameraController.enableTilt = true;
         that.scene.screenSpaceCameraController.enableLook = true;
      },
      SetStartSite: function (ids) {
         var bool = that.checkIds(ids);
         if (bool) {
            that.l = bool;
            return true;
         } else {
            return false;
         }
      },
      viewToSite: function (site) {
         that.scene.camera.setView({
            destination: new Cesium.Cartesian3(site.position_x, site.position_y, site.position_z),
            orientation: {
               heading: site.heading,
               pitch: site.pitch,
               roll: site.roll
            }
         });
      }
   };
}
}