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

Post 如何使用OpenLayers提高大型可编辑层的加载速度?,post,openlayers,wms,Post,Openlayers,Wms,我面临一个性能问题,无法快速加载层。 我正在使用OpenLayers 5.3、GeoServer 2.10和Oracle 12数据库。 我有一些(3-4)WMS层作为信息和背景,还有一个可以编辑的WFS层。最后一个具有30000多条多段线,加载速度较慢 所以我在寻找一些解决方案,我想要一些建议: 首先,我试图在平铺版本中更改我的WFS层,但我失败了 无法使其工作,或者我发现的样本不够准确 然后,我尝试在WMS平铺版本中更改我的WFS层。我是 我能让它工作,但我注意到这种 图层并没有更快,而且标

我面临一个性能问题,无法快速加载层。 我正在使用OpenLayers 5.3、GeoServer 2.10和Oracle 12数据库。 我有一些(3-4)WMS层作为信息和背景,还有一个可以编辑的WFS层。最后一个具有30000多条多段线,加载速度较慢

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

  • 首先,我试图在平铺版本中更改我的WFS层,但我失败了 无法使其工作,或者我发现的样本不够准确
  • 然后,我尝试在WMS平铺版本中更改我的WFS层。我是 我能让它工作,但我注意到这种 图层并没有更快,而且标签也被复制了 每个生成的磁贴。我找到的解决方案说我应该使用 简单的WMS层绕过此问题。。。嗯,好的
  • 我用WMT开始了一些测试,但意识到我的图层经常会改变,所以我无法处理已经生成的瓷砖
最后,我认为更好的方法是使用一个简单的WMS图层,当我必须编辑WFS图层中的要素时,只切换要素中所需的多段线。 但是,我必须过滤WMS层的数据。我发现在参数中使用CQL滤波器是可能的。它可以工作,但由于GET请求,筛选器的大小受到限制。 所以我在一篇文章中找到了修改请求的示例。它再次工作,但这次我注意到,根据WHERE子句“ID in(1,2,3,4…99910001001…)中的项目数,层生成变得非常缓慢

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

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

如果有人对我的情况有更好的建议,我洗耳恭听:-)


致以最诚挚的问候。

我过去常做的是显示WMS磁贴,当用户单击“线”时,将相关信息检索到浏览器,将检索到的几何图形绘制为覆盖,并编辑所需的任何内容

唯一的缺点是你不能在鼠标悬停时改变所有线条的颜色,但是从用户的角度来看,它可以非常平滑和快速

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


当然,在更新参考底图WMS之间会有延迟,因为您将向服务器发送更新,并且只有在获得确认后,您才能开始刷新WMS层(否则您的更改可能尚未处理,而刷新只会提供旧状态)。因此,在您发送更新后,您可能需要考虑一些东西来向用户指示视觉更新正在等待。

我认为可以查看如何实例化地图。 我有一个类似的问题,一个有1000个标记的图层,而加载问题是由于IStation

让我们假设我有我的特性数组
标记

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);
 });
也许可以应用类似的解决方案,但使用多段线而不是点