我面临快速加载图层的性能问题。 我正在使用OpenLayers 5.3,GeoServer 2.10和Oracle 12数据库。 我有一些(3-4)WMS层用于信息和背景,还有一个可以编辑的WFS层。最后一条包含超过30000条折线,并且加载速度很慢。
所以我一直在寻找一些解决方案,我想要一些建议:
最后,我认为更好的方法是使用简单的WMS图层,并在需要编辑时在WFS图层中仅切换要素中需要的折线。 但是,我必须过滤WMS层的数据。我发现可以使用参数中的CQL过滤器。它可以工作,但是由于GET请求,筛选器的大小受到限制。 因此,我找到了在POST上更改请求的示例。它可以再次工作,但是这次我注意到,根据我的WHERE子句“((1,2,3,4 ... 999,1000,1001 ...)中的ID”中的项数,层生成变得非常缓慢
这是我现在的位置,并且我一直期待:什么是解决“问题”的最佳方法?
现在,我想通过在层中添加更多列以比简单的“(...)中的ID”更好地构建过滤器来简化CQL过滤器,并以这种方式继续:用WMS替换WFS层一个并添加一些自定义代码以我想要的方式对其进行管理。
如果有人对我的情况有更好的建议,我会不禁为:-)
最诚挚的问候。
答案 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);
});
也许您可以应用类似的解决方案,但是用折线代替点。