getFeaturesAtPixel
предназначен для отчета о том, что именно отображается на карте. Если вы хотите получить все объекты в определенном месте, вы можете использовать метод ol/source/Vector
getFeaturesInExtent
для небольшого буфера (например, 2 пикселя) вокруг интересующей вас координаты:
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);
, а затем получить только функции в вашем буфере экстента:
import {intersects} from 'ol/extent';
const features = tile.getFeatures();
const matches = [];
for (let i = 0, ii = features.length; i < ii; ++i) {
const feature = features[i];
if (intersects(extent, feature.getGeometry().getExtent()) {
matches.push(feature);
}
}