首页 / 浏览问题 / 三维GIS / 问题详情
cesium 沿线飞行切换路线
22EXP 2023年03月13日
无法切换路线,它将切换的路线都加在一块飞行了

  play(id) {

      this.isplay = !this.isplay;

      let aaa = true;

      if (this.id == id) {

        aaa = false;

      } else {

        aaa = true;

        this.id = id;

      }

      if (!this.isplay) {

        //播放

        if (aaa) {

          let para = {

            parentId: id,

          };

          this.axios({

            method: "post",

            url: "/fzgh/tdPathNavigation/list",

            params: para,

          }).then((res) => {

            var viewList = [];

            res.data.forEach((item) => {

              viewList.push({

                x: Number(item.x),

                y: Number(item.y),

                z: Number(item.z),

                speed: Number(item.speed),

                roll: Number(item.roll),

                pitch: Number(item.pitch),

                heading: Number(item.heading),

                distance: Number(item.distance),

              });

            });

            let arrivedStopNum = 0;

            window.flyManager.stopArrived.addEventListener((routeStop) => {

              routeStop.waitTime = 0.1; //修改站点的停留时间

              arrivedStopNum += 1;

              if (arrivedStopNum === viewList.length - 1) {

                this.playEnd();

              }

            });

            window.flyManager.readyPromise.then(() => {

              var route = window.flyManager.currentRoute;

              route.isLineVisible = false;

              route.isStopVisible = false;

              // console.warn(this.arr, "第二次");

              console.log(this.arr.length);

              // if (this.arr.length > 0) {

              //   this.arr.forEach((routeStop) => {

              //     route.removeAllSites(routeStop);

              //   });

              //   // console.warn(this.arr, "第三次");

              // }

              // this.arr = [];

              console.warn(window.flyManager, "currentIndex ");

              // window.flyManager.currentIndex = 1; //飞行路线可以添加多个route,设置索引来加载不同的路线

              for (var k = 0; k < viewList.length; k++) {

                var position = Cesium.Cartesian3.fromDegrees(

                  viewList[k].x,

                  viewList[k].y,

                  viewList[k].z

                );

                var routeStop = new Cesium.RouteStop({

                  point: position,

                  heading: viewList[k].heading,

                  tilt: Cesium.Math.toRadians(viewList[k].pitch),

                  stopName: "站" + k,

                  speed: viewList[k].speed,

                  waitTime: 1,

                });

               

                route.addStop(routeStop);

                this.arr.push(routeStop);

              }

              console.warn(route, "routeStop");

              viewList = [];

              // console.warn(this.arr, "第一次");

            });

            window.flyManager && window.flyManager.play();

          });

        } else {

          window.flyManager && window.flyManager.play();

        }

      } else {

        window.flyManager && window.flyManager.pause();

      }

    },

fpf文件

<?xml version="1.0" encoding="UTF-8"?>

<SceneRoute xmlns="http://www.supermap.com.cn/ugc60">

<route name="飞行路线_3" speed="100" lineType="0" showroutestop="False" showrouteline="False" altitudefree="False" headingfree="False" tiltfree="False" flycircle="False" alongline="False">

<style>

<geostyle3d>

<linecolor>RGBA(147,112,219,255)</linecolor>

<linewidth>2</linewidth>

<altitudeMode>Absolute</altitudeMode>

<bottomAltitude>0.00</bottomAltitude>

</geostyle3d>

</style>

</route>

</SceneRoute>

删掉了默认的加载点了

1个回答

您好,建议您这边把fpf文件的多条飞行路线换成多个fpf文件每个文件中只有一条路线的数据。

这样的话,不管是单次飞行的数据请求还是读取都会比单个fpf速度快,切换也更加方便。

您如果要使用另一个fpf文件,直接重新设置一下Fromfile属性即可。

//读取飞行文件。
routes.fromFile('./test.fpf');

路径重新设置为新的fpf文件路径。

4,151EXP 2023年03月13日
怎么重新设置啊,大哥可以发个代码看看么
以为数据都是不固定的,是活的,所以我不可能知道有多少条数据

一个fpf通常只能加载一条路线。

如果是多条且不固定,通常也是写入到fpf中再导入。

即根据自己的站点,构建routesop然后往route里面加,加完了写入到xml文本中,最后在存储为一个fpf在通过导入该fpf来沿线飞行。

可以参考非FPF文件的飞行路径相关博客

https://blog.csdn.net/supermapsupport/article/details/94432952

https://blog.csdn.net/supermapsupport/article/details/97756526

至于demo的话暂时没有现成的。

有源码么,那些我都看到了,没用,我都试过
这两个博客就是根据非fpf的飞行功能所写的。

博客中的部分代码也是功能实现所需的代码。

我可以将博客中提到的示例发您,其他的源码暂时没有。

如果这两个博客对您没有用的话,可能已有功能无法实现您的需求。

链接:https://pan.baidu.com/s/1Oy2Db5j3_aplorkq2MtbZA?pwd=p9yb
提取码:p9yb
谢谢,非常感谢你的帮助
...