Use getFeaturesInExtent

This commit is contained in:
Andreas Hocevar
2022-01-06 20:07:34 +01:00
parent 69c02aa6c8
commit a2388756f2

View File

@@ -42,6 +42,9 @@ const dragBox = new DragBox({
map.addInteraction(dragBox); map.addInteraction(dragBox);
dragBox.on('boxend', function () { dragBox.on('boxend', function () {
const extent = dragBox.getGeometry().getExtent();
const boxFeatures = vectorSource.getFeaturesInExtent(extent);
// features that intersect the box geometry are added to the // features that intersect the box geometry are added to the
// collection of selected features // collection of selected features
@@ -50,11 +53,6 @@ dragBox.on('boxend', function () {
// be added directly to the collection // be added directly to the collection
const rotation = map.getView().getRotation(); const rotation = map.getView().getRotation();
const oblique = rotation % (Math.PI / 2) !== 0; const oblique = rotation % (Math.PI / 2) !== 0;
const candidateFeatures = oblique ? [] : selectedFeatures;
const extent = dragBox.getGeometry().getExtent();
vectorSource.forEachFeatureIntersectingExtent(extent, function (feature) {
candidateFeatures.push(feature);
});
// when the view is obliquely rotated the box extent will // when the view is obliquely rotated the box extent will
// exceed its geometry so both the box and the candidate // exceed its geometry so both the box and the candidate
@@ -66,13 +64,15 @@ dragBox.on('boxend', function () {
const geometry = dragBox.getGeometry().clone(); const geometry = dragBox.getGeometry().clone();
geometry.rotate(-rotation, anchor); geometry.rotate(-rotation, anchor);
const extent = geometry.getExtent(); const extent = geometry.getExtent();
candidateFeatures.forEach(function (feature) { boxFeatures.forEach(function (feature) {
const geometry = feature.getGeometry().clone(); const geometry = feature.getGeometry().clone();
geometry.rotate(-rotation, anchor); geometry.rotate(-rotation, anchor);
if (geometry.intersectsExtent(extent)) { if (geometry.intersectsExtent(extent)) {
selectedFeatures.push(feature); selectedFeatures.push(feature);
} }
}); });
} else {
selectedFeatures.extend(boxFeatures);
} }
}); });