Pass geometry to forEachFeatureAtPixel callback

This commit is contained in:
Andreas Hocevar
2020-11-27 13:43:28 +01:00
parent 7b5f53753b
commit 28aaa2e0d3
12 changed files with 108 additions and 28 deletions

View File

@@ -6,8 +6,13 @@ import VectorLayer from '../../../../src/ol/layer/Vector.js';
import VectorSource from '../../../../src/ol/source/Vector.js';
import View from '../../../../src/ol/View.js';
import {Circle, Fill, Style} from '../../../../src/ol/style.js';
import {Point} from '../../../../src/ol/geom.js';
import {
GeometryCollection,
MultiPoint,
Point,
} from '../../../../src/ol/geom.js';
import {Projection} from '../../../../src/ol/proj.js';
import {fromExtent} from '../../../../src/ol/geom/Polygon.js';
describe('ol.renderer.Map', function () {
describe('constructor', function () {
@@ -21,6 +26,69 @@ describe('ol.renderer.Map', function () {
});
});
describe('#forEachFeatureAtPixel', function () {
let map;
beforeEach(function () {
const target = document.createElement('div');
target.style.width = '100px';
target.style.height = '100px';
document.body.appendChild(target);
map = new Map({
target: target,
view: new View({
center: [0, 0],
zoom: 2,
}),
});
});
afterEach(function () {
document.body.removeChild(map.getTargetElement());
map.setTarget(null);
});
it('calls callback with feature, layer and geometry', function () {
let hit;
const point = new Point([0, 0]);
const polygon = fromExtent([0, -1e6, 1e6, 1e6]);
const geometryCollection = new Feature(
new GeometryCollection([polygon, point])
);
const multiPoint = new MultiPoint([
[-1e6, -1e6],
[-1e6, 1e6],
]);
const multiGeometry = new Feature(multiPoint);
const layer = new VectorLayer({
source: new VectorSource({
features: [geometryCollection, multiGeometry],
}),
});
map.addLayer(layer);
map.renderSync();
hit = map.forEachFeatureAtPixel([50, 50], (feature, layer, geometry) => ({
feature,
layer,
geometry,
}));
expect(hit.feature).to.be(geometryCollection);
expect(hit.layer).to.be(layer);
expect(hit.geometry).to.be(point);
hit = map.forEachFeatureAtPixel([75, 50], (feature, layer, geometry) => ({
feature,
layer,
geometry,
}));
expect(hit.feature).to.be(geometryCollection);
expect(hit.geometry).to.be(polygon);
hit = map.forEachFeatureAtPixel([25, 25], (feature, layer, geometry) => ({
feature,
layer,
geometry,
}));
expect(hit.feature).to.be(multiGeometry);
expect(hit.geometry).to.be(multiPoint);
});
});
describe('#forEachFeatureAtCoordinate', function () {
let map, source, style;
beforeEach(function () {