首页 / 浏览问题 / 移动GIS / 问题详情
ol中 要素 feature 如何进行显隐控制
lcd
1EXP 2019年07月22日
使用产品:SuperMap iClient 9D for OpenLayers

操作系统:win10 x64
问题详细描述:当将点要素渲染到点图层的时候,点图层可以通过setVisible函数进行显隐,但是点要素却没有对应的函数进行显隐控制,请问有什么解决方案可以解决这个问题吗?

1个回答

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

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

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

3,357EXP 2019年07月22日
对的,我的意思就是想控制 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的显隐,您这边也可以做一下实验,看看我这种方式是否可行,是否有效率上的问题,或者其他问题,期待您的回复
感谢感谢,虽然没花太多时间就找到了您的答案。方式可行,效率上从常理上应该也是没问题。我的实现需求跟楼主的差不多,也是不想增加额外的变量跟多余的处理方式。
...