ol中 要素 feature 如何进行显隐控制

0 投票
使用产品:SuperMap iClient 9D for OpenLayers

操作系统:win10 x64
问题详细描述:当将点要素渲染到点图层的时候,点图层可以通过setVisible函数进行显隐,但是点要素却没有对应的函数进行显隐控制,请问有什么解决方案可以解决这个问题吗?
7月 22, 2019 分类:  360次浏览 | 用户: lcd (1 分)

1个回答

0 投票

你好,我可以理解为你想对要素进行一个控制吗?再openlayer中,要素是通过source来进行对要素的控制的,你可以查看其apihttps://openlayers.org/en/latest/apidoc/module-ol_source_Vector-VectorSource.html

可以对source中的要素进行获取,删除等操作。  

或者还有一个方法是,可将矢量图层可以设置多个,比如一类属性要素设置一个矢量图层,这样来达到显示隐藏的效果

7月 22, 2019 用户: 阳俊林 名扬四海 (3,296 分)
对的,我的意思就是想控制 feature的 显隐,通过source是可以进行要素的增删,但是我需要额外保存一个原始全部要素的数据,然后动态的去更新source,但是我现在的想法是我的所有feature都同时渲染到layer上,然后只想通过设置某一个属性或者调用某一个方法来进行feature的显隐,所有操作都在layer上进行,不单独进行其他原始数据变量的维护。
原生openlayer layer里面没有可以对要素进行显示隐藏的方法。只能是一个图层可以进行显示隐藏。

你这个可以将全部的要素存储到一个数组里面,然后循环来进行判断得到你想显示的要素,形成一个新的数组,然后将source.clear()一下,然后要素添加到source里面,达到对矢量图层的一个刷新的效果。这个应该是比较直接的方法。
这样做是可以的,但是感觉有两个问题

1. 需要有一个额外的变量来保存原始的数据

2. 需要进行数据的比对,数组的截取,合并等操作,之后再添加到layer中进行渲染,感觉程序上繁琐了一些,并不直接

上面我理解的不知道对不对,您这边可以给一些建议。

但是我昨天试代码的时候,发现了一个可以直接操作feature显隐的方案,我简单说一下我的方案,一共分为两步:

1. 将layer的style设置成null

2. 将feature的style设置成null则feature就不会渲染在layer上,达到了隐藏的目的,重新给feature设置样式,则feature又重新渲染到了layer上

通过这种方式达到了控制feature的显隐,您这边也可以做一下实验,看看我这种方式是否可行,是否有效率上的问题,或者其他问题,期待您的回复
...