什么';这是更新功能的最佳方式;客户端openlayers中的位置和方向?

什么';这是更新功能的最佳方式;客户端openlayers中的位置和方向?,openlayers,geoserver,web-feature-service,Openlayers,Geoserver,Web Feature Service,我有很多特性(数千个),其中一些(~数百个)会改变位置/方向/状态。因此,我尝试用以下两种方法更新图层/地图: 我通过setCoordinates更新:(数据通过socket.io) feature.getGeometry().setCoordinates(ol.proj.transform([data.longitude,data.latitude],'EPSG:4326','EPSG:3857') 我创建了一个包含所有特征的全局数组,并设置了一个间隔(5秒),清除矢量源,再次从全局数组添加特

我有很多特性(数千个),其中一些(~数百个)会改变位置/方向/状态。因此,我尝试用以下两种方法更新图层/地图:

  • 我通过setCoordinates更新:(数据通过socket.io)

    feature.getGeometry().setCoordinates(ol.proj.transform([data.longitude,data.latitude],'EPSG:4326','EPSG:3857')

  • 我创建了一个包含所有特征的全局数组,并设置了一个间隔(5秒),清除矢量源,再次从全局数组添加特征。顺便说一下,我更新全局数组如下:

    //数据:是此处更新的功能。(位置、方向和自定义状态已更改)

    var index=globalFeaturesArray.findIndex(feature=>feature.getId()==data.getId()); 全局特征数组[索引]=数据;//已在全局阵列中设置新功能

  • 问题是,如果更新的功能太多,浏览器会在全局数组中查找并替换这些功能时冻结。在更换过程中,新的更新可能会一次又一次地出现(瓶颈)。 第一条路也是如此。它还为每个功能更新重新计算集群

    如果openlayers地图中的功能不断得到更新,那么在openlayers地图中显示这些功能的最佳方式是什么? 我阅读了有关geoserver和WFS的主题,但我不确定它是否适合我的情况?100x功能可能会改变位置,而900x功能会保持不变,所以wfs服务器会一次又一次地向我发送1k功能?这可能会在geoserver和客户端之间发生大量无用的通信量


    希望有更好的方法实时解决这个问题

    我认为如果你改变你的算法进行更新,你会有很大的进步。现在,最坏的情况是n*m(其中n是globalFeaturesArray长度,m是每次要更新的要素数),每次更新都要遍历globalFeaturesArray,这不好。您可以用不同的方法来改进。例如,使用字典而不是数组。我认为如果您将算法更改为更新,您可以改进很多。现在,最坏的情况是n*m(其中n是globalFeaturesArray长度,m是每次要更新的要素数),每次更新都要遍历globalFeaturesArray,这不好。您可以用不同的方法来改进。例如,使用字典而不是数组。