{
mutable countReEvaluation++;
const updateLayer = () => {
const sitesPacked = createSitePacks();
const values = [...new Map(sitesPacked).values()];
const valuesCollide = applySimulation(values);
const flatData = [];
valuesCollide.map((d) => {
flatData.push({
r: d.r,
x: d.x,
y: d.y,
site: d.k,
species: "All",
opacity: 0.6
});
d.nodes.map((node) => {
flatData.push({
r: node.r,
x: d.x + node.x,
y: d.y + node.y,
site: node.data.site,
species: node.data.key,
opacity: 0.9
});
});
});
let outdata = [];
flatData.map((d) => {
let loc = map.unproject(d);
outdata.push({
...d,
lat: loc.lat,
lng: loc.lng
});
});
const datageoZoom = outdata.map((d, i) => {
let sel = {};
if (selected && selected[0]) {
sel = selected[0];
}
return {
id: i,
properties: {
...d,
stroke: d.site === sel.site && d.species === "All" ? 1 : 0,
color: d.species === "All" ? "white" : colorScale(d.species),
radius: d.r,
opacity: d.opacity
},
geometry: {
type: "Point",
coordinates: [d.lng, d.lat]
},
type: "Feature"
};
});
let fc = {
type: "FeatureCollection",
features: datageoZoom.sort((a, b) => b.properties.r - a.properties.r)
};
if (map._loaded) {
if (!map.getSource("stories")) {
map.addSource("stories", {
type: "geojson",
data: fc
});
} else {
map.getSource("stories").setData(fc);
}
if (map.getLayer(hexbinLayer.id)) {
map.removeLayer(hexbinLayer.id);
}
map.addLayer(hexbinLayer);
return true;
}
};
if (mutable countReEvaluation <= 0) {
map.on("viewreset", () => {
console.log("viewreset");
updateLayer();
});
map.on("move", () => {
console.log("move");
updateLayer();
});
map.on("moveend", () => {
console.log("moveend");
updateLayer();
});
}
}