如何使用OpenLayers提高大型可编辑图层的加载速度?

时间:2019-03-07 12:02:26

标签: post openlayers wms

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

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

  • 首先,我尝试将我的WFS图层更改为平铺版本,但是 无法使它正常工作,或者我发现的样本不够准确
  • 然后,我尝试在WMS平铺版本中更改WFS层。我曾是 能够使其工作,但我注意到这种加载方式 层并没有更快,而且标签被复制到 每个生成的图块。我发现的解决方案说我应该使用 简单的WMS层绕过此问题...好吧。
  • 我开始使用WMTS进行一些测试,但意识到我的图层会经常更改,因此我无法使用已生成的图块。

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

这是我现在的位置,并且我一直期待:什么是解决“问题”的最佳方法?

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

如果有人对我的情况有更好的建议,我会不禁为:-)

最诚挚的问候。

2 个答案:

答案 0 :(得分:0)

我曾经做过的工作是显示WMS磁贴,然后当用户单击“线条”时,将相关信息检索到浏览器,将检索到的几何图形绘制为覆盖图,然后进行所需的编辑。

唯一的缺点是,当您将鼠标悬停在上面时,您将无法进行诸如更改-all-线的颜色之类的操作,但是从用户的角度来看,它可以非常平滑且快速。

除此之外,Geoserver的WMS渲染选项比OpenLayers内置的功能强大得多。

在更新底层WMS之间当然会有一个延迟,因为您会将更新发送到服务器,只有在 得到确认后,您才能开始刷新WMS层(否则您的更改可能尚未得到处理,而刷新只会使您恢复原来的状态)。因此,您可能需要考虑一些事情,以向用户指示在发送更新后视觉更新正在等待处理。

答案 1 :(得分:0)

我认为查看如何实例化地图可能很有用。 我在具有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);
 });

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