微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OpenLayers Cluster Source 不返回 (source.getSource()) 给定的确切原始源

如何解决OpenLayers Cluster Source 不返回 (source.getSource()) 给定的确切原始源

我有一个 VectorLayer,原始源为 VectorSource。 在应用程序中,有一个开关允许用户启用/禁用 VectorLayer 的聚类功能

基本上,在切换 ON 时,会运行类似如下的代码

layer.setSource(new Cluster({ source: layer.getSource() }));

然后关闭

const source = layer.getSource();
if (source instanceof Cluster) {
    layer.setSource(source.getSource());
}

到目前为止一切正常。当应该从 source.getSource() 返回的原始源似乎与我最初提供的 (...{ source: layer.getSource() }) 不完全相同时,问题就出现了 (.pipe( switchMap(x => { return this.clientService.A(); }),filter(firstResp => Helpers.IsNotNull(firstResp)),switchMap(firstRep => { return this.clientService.B(firstResp.someProp); }),).subscribe( //Want to access response of both services in subscribe method. ); )

我怎么说?
我们有一些功能(不谈论 OpenLayers 功能)供用户使用 VectorLayer 上的功能样式。例如,改变他们的颜色,切换他们的标签,分配图片等。在用户与上面解释的切换进行任何交互之前,所有这些样式操作都是快速而流畅的。然而,在交互之后,所有这些操作需要大约 10-15 倍的时间。这是一个巨大的性能问题。

我已经调查这个问题好几天了。我似乎无法理解为什么会这样。在我读过的一些论坛主题中,向量通常不能有效地在客户端处理 +1000 个功能。但是对于我和我们的用户来说,一切都足够快,直到集群切换打开和关闭(意味着创建的原始源至少被替换了一次)。

似乎在更换源的过程中丢失了一些东西,这对性能有显着影响。

解决方法

在集群源被移除时调用 source.setSource(null);。 否则,只要源存在,集群源就会一直存在,并且每次源触发更改事件时,它都会对要素进行集群。 https://openlayers.org/en/main/apidoc/module-ol_source_Cluster-Cluster.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。