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

问题描述 投票:0回答:2

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

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

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

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

这就是我现在的位置,我期待着:对于我的“问题”,最好的方法是什么?

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

如果有人对我的情况有更好的建议,我全都耳朵:-)

最好的祝福。

post openlayers wms
2个回答
0
投票

我以前做的是显示WMS图块,当用户点击“线”时,将相关信息检索到浏览器,将检索到的几何图形绘制为叠加层,并编辑所需的任何内容。

唯一的缺点是,当你悬停鼠标时,你不能改变-all-线的颜色,但从用户的角度来看,它可以非常流畅和快速。

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

更新底层WMS之间当然会有延迟,因为您将向服务器发送更新,并且只有在您获得确认后,才能开始刷新WMS层(否则您的更改可能尚未处理,和刷新只会给你旧的状态)。因此,在发送更新后,您可能需要考虑向用户指示可视更新处于待处理状态。


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);
 });

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

热门问题
推荐问题
最新问题