首页 / 浏览问题 / 三维GIS / 问题详情
自定义飞行站点怎么定义
gp
37EXP 2019年04月30日
我用的是vue
然后这些代码都在mounted里面初始了,请问一下代码有什么问题,出不来飞行效果


//生成飞行站点
createFlyStop(pointLatlng,indexs){
  let routeStop=new Cesium.RouteStop({
    index:indexs,
    duration:10,
    waitTime:2,
    point:pointLatlng,
    heading:6.901089214916513,
    tilt : -0.40668579780875524,
    stopName :"gg"+indexs,
    speed:20,
  });//站点
  return routeStop
},

//设置仓库飞行浏览
warehousePointFly(){
  let routes=new Cesium.RouteCollection(this.viewer.entities)
  routes.fromFile("./static/NewSceneRoutes.fpf");//这里是我自己新建的一个空的文件
  this.viewer.scene.globe.depthTestAgainstTerrain = false;
  let route=new Cesium.Route()
  route.isAlongline = true;
  route.flycircle = true;
  this.routeFlyStopArr.map(el=>{//这里是通过上面createFlyStop生成的点位  routeFlyStopArr是站点的数组
    route.addStop(el)
  })
  routes.addRoute(route)

  this.flyManager = new Cesium.FlyManager({scene:this.viewer.scene,routes:routes});
  this.flyManager.stopArrived.addEventListener((routeStop)=>{
    routeStop.waitTime = 1;
  })
  Cesium.when(this.flyManager.readyPromise, function() {
    var allStops = this.flyManager.getAllRouteStops();

  });

},
//开始按钮
playFly(){

 this.flyManager.play();
}

问题关闭原因: 已解决

1个回答

您是想通过前端自定义实现,还是后台写好站点实现呢?我记得我给您发过一个demo
6,215EXP 2019年04月30日

前端自己实现,有相应的点位,然后前端生成站点实现,demo我看了,然后自己敲了上面的代码,没实现效果,想问一下哪里出问题了,

this.flyManager.getAllRouteStops();
这里获取的站点是空的,但是上面我添加的站点能打印出来,很懵逼
请问你解决这个问题了吗,我也碰到这个问题

设置飞行浏览的代码我改动了,其他的代码没有改动,具体的原因我忘了,这是我现在的代码:

//设置仓库飞行浏览
warehousePointFly() {
  let routes = new Cesium.RouteCollection()
  routes.fromFile("./static/NewSceneRoutes.fpf");
  Cesium.when(routes.readyPromise, () => {
    var route = routes.get(0);
    this.flyManager = new Cesium.FlyManager({scene: this.viewer.scene, routes: routes});
    this.flyManager.stopArrived.addEventListener((routeStop) => {
      routeStop.waitTime = 1;
      routeStop.tilt = -0.6251364830648192
      routeStop.heading = 0.13747471637916586
      this.viewer.flyTo(this.viewer.entities.getById("着火点"))
    })

    this.routeFlyStopArr.map(el => {
      route.addStop(el)
    })
    Cesium.when(this.flyManager.readyPromise, () => {
      this.flyManager.currentStopIndex = 4;
      var currentRoute = this.flyManager.currentRoute;
      currentRoute.isLineVisible = true;
      currentRoute.isStopVisible = true;
      currentRoute.isAlongline = true;
    });
  })

},
想问一下你的fpf文件是空的吗,还有这个warehousePointFly()方法是什么时候执行的,为什么我进不去 Cesium.when(routes.readyPromise, () => {})这里面的回调

fpf直接在idesktop创建一个空的就行了,进不去的话你先看一下

let routes = new Cesium.RouteCollection()
  routes.fromFile("./static/NewSceneRoutes.fpf");

这两行代码对应的站点是不是有问题,控制台看有没有什么错误排除一下吧,当时我的问题好像也是站点的问题

var  flyManager
        var  routes= new Cesium.RouteCollection(viewer.entities);
        var  fpfUrl='./test.fpf';
        routes.fromFile(fpfUrl);
        Cesium.when(routes.readyPromise, () => {
            console.log(routes)
        })

这段代码有什么问题吗   这个回调进不去,打印不出routes,而且通过routes.fromFile,routes里面的route的参数是一个空数组,我的fpf文件里是有站点的,是我的fpf文件有问题吗,能否发一份你的fpf文件给我

同问啊!,我是用react实现飞行,但是总是进不去

 Cesium.when(this.flyManager.readyPromise, () => {
      this.flyManager.currentStopIndex = 4;
      var currentRoute = this.flyManager.currentRoute;
      currentRoute.isLineVisible = true;
      currentRoute.isStopVisible = true;
      currentRoute.isAlongline = true;
    });
...