Pass geometry to forEachFeatureAtPixel callback
This commit is contained in:
@@ -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 () {
|
||||
|
||||
Reference in New Issue
Block a user