首页 / 浏览问题 / 三维GIS / 问题详情
supermap+cesium标绘viewer绑定问题
1EXP 2022年10月20日
js引入:<script type="text/javascript" src="./build/Cesium/ThirdParty/Workers/PlotAlgo/PlotAlgoInclude.js"></script>

代码处使用如下

InitPlot(viewer, serverUrl) {

      console.log(11);

      var scene=viewer.scene;

      var cesium = Cesium;

      var plottingLayer;

      var plotEditControl;

      var plotDrawControl;

      var plotPanel;

      var plotting;

        plottingLayer = new cesium.PlottingLayer(scene, "plottingLayer");

        scene.plotLayers.add(plottingLayer);

        plotEditControl = new cesium.PlotEditControl(scene, plottingLayer);//编辑控件

        plotDrawControl = new cesium.PlotDrawControl(scene, plottingLayer);//绘制控件

        plotDrawControl.drawControlEndEvent.addEventListener(function () {//标绘结束,激活编辑控件

            plotEditControl.activate();

        });

        plotting = cesium.Plotting.getInstance(serverUrl,scene);

        //标绘面板

        initPlotPanel("plotPanel", serverUrl, plotDrawControl, plotEditControl, plotting);

        stylePanel = new StylePanel('stylePanel', plotEditControl, plotting);

    },

vue项目中有三处使用了标绘方法,进入一个标绘页面,再进去其他标绘页面,标绘对象被绑死在第一次进入的页面,第二个页面标绘的图层,显示在第一个页面,销毁了Plotting也不行,请问是什么原因

1个回答

您好,

“ 标绘对象被绑死在第一次进入的页面,第二个页面标绘的图层 ”

您这边第二个页面标绘的图层是否有删除呢?

被绑死在第一次进入的页面是什么意思呢?

Plotting 新建的时候就设置了对应的serverUrl

您是想要修改这个吗?
4,151EXP 2022年10月20日
有两个页面都是标绘,写法都是上面的写法,先进入到一个标绘页面都是正常的,在进入第二个标绘页面,在第二个标绘的东西显示在第一个页面里面,第二个标绘页面里面没有标绘的内容,按照逻辑来说,我在两个页面使用标绘,绑定的viewer是不一样的,但是现在现象是标绘对象感觉还是第一个页面的地球,
没太理解您的意思。

您这边plotting绑定的scene是同一个场景吗?

如果是同一个应该没什么问题才对,两个标绘页是指两个页面还是两个浮动框?

如果方便的话您可以发一份录屏给我,私信我网盘地址即可。
嗯嗯,好,我录个视频
您好,我这边已经私信您了,您看出问题了嘛,十分感谢
您好,

您的私信中并没有云盘链接,我这边看不见任何视频。

麻烦您这边附上云盘链接。
不好意思,是没有,我已经再次发了,麻烦您了

您看您的代码,绑定的scene对不对。这个scene是您的第一个场景。

标绘已经绑定在第一个场景了。

同时,标绘图层也是绑定在这个场景里的。

两个页面两个场景使用同一个标绘服务的情况下是否会冲突暂时没有测试过。

然后就是试试用标绘结束去激活控件:

plotDrawControl.drawFinishEvent.addEventListener(function () {//标绘结束,激活编辑控件
        plotEditControl.activate();
    });
plotDrawControl.drawControlEndEvent.addEventListener(function () {//标绘结束,激活编辑控件

            plotEditControl.activate();

        });

我在提问的时候贴了使用的代码,这个我使用了,我在两个页面用的是写的方法一样,初始化的球(viewer.scene)肯定不一样,我已经验证过了,我还使用了,plotting.destroy()销毁标绘对象,包括viewer.destroy(),然后在另一个页面重新出实话地球viewer和初始化plotting,但是现象还是一样的。
plotting = cesium.Plotting.getInstance(serverUrl,scene);我使用的serverUrl是一样的,会不会是地址一样的所以销毁是不成功的
drawControlEndEvent 和drawFinishEvent 是两个不同的事件,首先这个您确定一下。

另外,您也可以尝试两个不同的serverUrl去使用看是否会出现问题。
...