Openlayers 如何提高getFeaturesAtPixel的性能?

Openlayers 如何提高getFeaturesAtPixel的性能?,openlayers,openlayers-5,Openlayers,Openlayers 5,我使用“map.getFeaturesAtPixel”方法在鼠标点击交互时精确地获得下面的第一个功能 即使该方法不返回单个特征,而是返回其图形表示命中单击点的所有特征,该方法仍能按预期工作 这种行为是“可以接受的”,但事实证明,一旦我们缩小,它的性能就会下降,许多功能被浓缩并显示为巨大的功能块 我知道这不是在地图上显示要素的理想方式,但在某些情况下可能会发生 无论如何,我尝试了一种似乎更快的方法,使用“小”范围(基于单击坐标)和GetFeaturesInIntersectingExtent检索我

我使用“map.getFeaturesAtPixel”方法在鼠标点击交互时精确地获得下面的第一个功能

即使该方法不返回单个特征,而是返回其图形表示命中单击点的所有特征,该方法仍能按预期工作

这种行为是“可以接受的”,但事实证明,一旦我们缩小,它的性能就会下降,许多功能被浓缩并显示为巨大的功能块

我知道这不是在地图上显示要素的理想方式,但在某些情况下可能会发生

无论如何,我尝试了一种似乎更快的方法,使用“小”范围(基于单击坐标)和GetFeaturesInIntersectingExtent检索我想要的内容(单击下的第一个功能)。这种方法确实很快,但并不适用于所有场景,因为它只知道特征几何图形,而不知道它们的图形表示(我的需求)


问题:还有其他方法可以在单击下以最佳方式获取第一个功能吗?

您可以使用此方法在单击鼠标时获取功能

var feature = map.forEachFeatureAtPixel(evt.pixel,
                    function (feature) {
                        return feature;
                    });

使用
var firstFeature=map.forEachFeatureAtPixel(evt.pixel,函数(feature){return feature;})
可能会更快,因为它停止在第一个功能上搜索,而不是不必要地构建一个包含所有功能的数组。是的!这无疑为这个问题增添了一些亮点。我还帮助这个函数添加了一个图层过滤器函数作为第三个参数。谢谢