是否有任何方法可以将一层的所有要素都包含在一个特定像素中,包括由于杂乱而隐藏的要素?当前,在调用Map.getFeaturesAtPixel()
(或Map.forEachFeatureAtPixel()
)时,这些功能会被忽略。
答案 0 :(得分:1)
getFeaturesAtPixel
旨在准确报告在地图上呈现的内容。如果要在特定位置获取所有要素,则可以使用ol/source/Vector
的{{1}}方法在感兴趣的坐标周围使用一个小的缓冲区(例如2个像素):
getFeaturesInExtent
使用矢量图块时,可以先获取图块来实现相同的目的
import {boundingExtent, buffer} from 'ol/extent';
map.on('click', function(e) {
const extent = boundingExtent([e.coordinate]);
buffer(extent, 2 / view.getResolution());
matches = source.getFeaturesInExtent(extent);
});
,然后仅获取缓冲区范围内的要素:
const tileGrid = vectorTileSource.getTileGrid();
const tileCoord = tileGrid.getTileCoordForCoordAndResolution(coordinate, view.getResolution());
const tile = vectorTileSource.getTile(tileCoord);
答案 1 :(得分:1)
为后代。我认为在大多数情况下,由于杂乱,您不需要结果包含隐藏功能,因为这可能导致光标位于空白区域的非空结果。
最终要做的是在不打开杂波的情况下创建一个附加层。首先,我在其中添加了所有不带标签的功能,并将它们隐藏起来只是不设置填充样式(将图层不透明度设置为零也可以)。当原始的杂乱特征与其他特征重叠但在空白区域仍产生误报时,这给了我很好的结果。
因此,最后我决定在杂乱的图层后面也显示此新图层,该样式具有不同的样式且没有标签。这样,在视觉上您可以看到所有功能和杂乱的标签都显示在顶部,从UX角度来看也可以很好地工作。