首页 > 解决方案 > 如何使用 OpenLayers 提高大型可编辑图层的加载速度?

问题描述

我面临着快速加载图层的性能问题。我正在使用 OpenLayers 5.3、GeoServer 2.10 和 Oracle 12 数据库。我有一些(3-4)个用于信息和背景的 WMS 图层,以及一个可以编辑的 WFS 图层。最后一个有超过 30000 条折线,加载速度很慢。

所以我一直在寻找一些解决方案,我想要一些建议:

最后,我认为更好的方法是使用简单的 WMS 图层,当我必须编辑它们时,只在 WFS 图层的要素中切换所需的折线。但是,我必须过滤 WMS 层的数据。我发现可以在参数中使用 CQL 过滤器。它可以工作,但是由于 GET 请求,过滤器的大小受到限制。所以我找到了在 POST 上更改请求的示例。它再次起作用,但是这次我注意到根据我的 WHERE 子句“ID in (1,2,3,4...999,1000,1001 ...)”中的项目数,图层生成变得非常缓慢.

这就是我现在所处的位置,我期待:我的“问题”的最佳方法是什么?

现在,我想通过在层中添加更多列来简化 CQL 过滤器,以构建比简单的“ID in (...)”更好的过滤器,并以这种方式继续:用 WMS 替换我的 WFS 层并添加一些自定义代码以我想要的方式管理它。

如果有人对我的情况有更好的建议,我会全神贯注:-)

此致。

标签: postopenlayerswms

解决方案


我认为看看如何实例化地图会很有用。我在一个有 1000 个标记的图层上遇到了类似的问题,加载问题是由于实例化造成的。

假设我有我的一系列功能markers

var markers = [];

如果我创建传递特征的标记层,加载地图真的很慢。

var vectorSource = new ol.source.Vector({
    features: markers
});
var vectorLayer = new ol.layer.Vector({
   source: vectorSource
});

否则,如果我创建图层然后动态地将每个功能添加到图层,加载时间会很好。

var vectorSource = new ol.source.Vector();
var vectorLayer = new ol.layer.Vector({
   source: vectorSource
});
 // Add each marker individually
 markers.forEach(function (feature) {
     vectorSource.addFeature(feature);
 });

也许您可以应用类似的解决方案,但使用折线而不是点。


推荐阅读