getFeaturesAtPixel()包含杂乱(隐藏)的功能

时间:2019-01-09 10:29:44

标签: openlayers openlayers-3

是否有任何方法可以将一层的所有要素都包含在一个特定像素中,包括由于杂乱而隐藏的要素?当前,在调用Map.getFeaturesAtPixel()(或Map.forEachFeatureAtPixel())时,这些功能会被忽略。

2 个答案:

答案 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角度来看也可以很好地工作。