viewof selection = {
const target = html`<div style="height:600px;">`;
yield target;
const vectorSource = new ol.source.Vector({
url: "https://openlayers.org/en/v5.2.0/examples/data/geojson/countries.geojson",
format: new ol.format.GeoJSON()
});
const map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
}),
new ol.layer.Vector({
source: vectorSource
})
],
target,
view: new ol.View({
center: [0, 0],
zoom: 2
})
});
target.value = [];
const select = new ol.interaction.Select();
const selection = select.getFeatures();
function selected() {
target.value = selection.getArray();
target.dispatchEvent(new CustomEvent("input"));
}
select.on("select", selected);
map.addInteraction(select);
const dragBox = new ol.interaction.DragBox({
condition: ol.events.condition.platformModifierKeyOnly
});
dragBox.on("boxstart", () => {
selection.clear();
});
dragBox.on("boxend", () => {
const e = dragBox.getGeometry().getExtent();
vectorSource.forEachFeatureIntersectingExtent(e, f => void selection.push(f));
selected();
});
map.addInteraction(dragBox);
invalidation.then(() => map.dispose());
return target;
}