首页 / 浏览问题 / WebGIS / 问题详情
我想实现动态添加飞行的fpf功能,
5EXP 2020年07月13日
我现在需要只做一个对外的方法,通过传入飞行fpf文件就可以直接飞行,而不是在onload方法里面加载好所有的飞行fpf文件,这样怎么操作啊 谢谢

1个回答

您好,你这边是想要实现的功能是传入哪个飞行文件就加载哪个吗?那样的话您可以将实现飞行功能的部分封装起来,通过外部传入飞行文件URL,可以参考官网范例http://support.supermap.com.cn:8090/webgl/examples/editor.html#flyRoute

康鑫
1
6,077EXP 2020年07月13日
意思是每传入一个url就得重新加载一次吗?这样肯定不行哦 加载时需要时间啊 这样效率低下,能不能写个这种样例给我参考下呢,你发的这个样例是写在onload里面的 只有一条路线 谢谢
麻烦您详细的说一下您的需求
<script>
    //请在联网状态下查看此飞行范例
    var flyManager;
    var viewer ;
    var scene;
    function onload(Cesium) {
        var toolbar = document.getElementById('toolbar');
          viewer = new Cesium.Viewer('cesiumContainer');
        viewer.imageryLayers.addImageryProvider(new Cesium.BingMapsImageryProvider({
            url: 'https://dev.virtualearth.net',
            mapStyle: Cesium.BingMapsStyle.AERIAL,
            key: URL_CONFIG.BING_MAP_KEY
        }));
          scene = viewer.scene;
        scene.globe.depthTestAgainstTerrain = false;
        var camera = scene.camera;
        //添加S3M图层服务
        var promise = scene.open(URL_CONFIG.SCENE_NIAOCHAO);
        promise.then(function (layers) {
            camera.setView({
                destination: Cesium.Cartesian3.fromDegrees(116.3801, 39.9874, 12.0),
                orientation: {
                    heading: 6.260995919619558,
                    pitch: 0,
                    roll: 0
                }
            });
        });
        
        $('#play').click(function () {
            var fpfUrl = './SampleData/fpf/niaocao.fpf';
            play(fpfUrl);
        });
    }

    function play(fpfUrl ){
            var routes = new Cesium.RouteCollection(viewer.entities);
            routes.fromFile(fpfUrl);
            //初始化飞行管理
              flyManager = new Cesium.FlyManager({
                scene: scene,
                routes: routes
            });
            //注册站点到达事件
            flyManager.stopArrived.addEventListener(function (routeStop) {
                routeStop.waitTime = 1; // 在每个站点处停留1s
            });

            flyManager.readyPromise.then(function () { // 飞行路线就绪
                var currentRoute = flyManager.currentRoute;
                currentRoute.isLineVisible = true;
                currentRoute.isStopVisible = true;
            });
    }
    if (typeof Cesium !== 'undefined') {
        window.startupCalled = true;
        onload(Cesium);
    }
</script>

就是想实现这样一个功能 直接调用paly方法,传入fpf文件就可以直接执行飞行,我们现在项目有500个飞行路线,我肯定不可能直接定义500个飞行变量哈,想通过传入fpf文件直接执行飞行
是通过什么方式传fpf文件,input输入框还是什么
java后台传入的一个路径,统一把这种fpf文件保存到服务器上的
你QQ或微信多少 我加你给你说吧  这里沟通太不方便了 谢谢
您那边给我一个QQ吧,我加您
764139377 谢谢
...