openlayer增加Feature立即显示

0 投票
使用产品:iserver 9c 操作系统:win10 x64
数据类型: 文件型
问题详细描述:openlayer中在已经加载好的Layer如何再增加Feature后立即显示在map
问题重现步骤:

通过接口增加Feature后,通过前端 调用 map.removeLayer(layer),再次增加map.addLayer(layer),该Feature不显示,但是F5刷新整个页面,Feature就能正常显示。
6月 18 分类:  27次浏览 | 用户: fzero (7 分)

1个回答

0 投票
把代码贴一下,另外为什么要先remove然后再add进去
6月 18 用户: 于浩 名扬四海 (3,595 分)

我是在增加后端程序通过接口的方式增加一个Feature成功后,通知前端成功了,同时能地图上显示出来。我之前的想的办法是通过removeLayer掉当前layer,再一次增加的方法,但是效果达不到。请问有别的方法能达到实现吗?


 

function refreshMap  () {
    if (this.map) {
        var self = this;
        if (self.mapLayers.length > 0  && self.mapLayers[4]) {
            self.map.removeLayer(self.mapLayers[4]);
            setTimeout(function () {
                self.createSingleLayer(4);
            }, 200);
        }
    }
}
 

您这个createSingleLayer这个function是在外面定义的,上面提到的addlayer的方法吗?您可以这样先测试一下,就是不removelayer,直接createsinglelayer(5),相当于再加一个新的图层上去,看看这样能不能出来这个feature。可以试一下做个递归函数,在remove后再执行refreshMap(),elase 里面如果self.mapLayers[4]不存在的话addlayer。

如果是添加一个feature到vectorlayer里的话可以用refresh刷新一下应该也可以https://openlayers.org/en/latest/apidoc/module-ol_source_Vector-VectorSource.html#refresh

试过了VectorSource.html#refresh的方法和先removeLayer 后再addLayer 这2种方法,出现情况在放大/缩小地图尺寸操作后,增加的Feature可以显示出来了,但是在原来增加的时候的显示尺寸会不可见,只有刷新整个页面都才。

...