function updateLaunches(month) {
const filtered = data
.filter((d) => d.launch_month === month)
.filter(
(d) =>
d && typeof d.longitude === "number" && typeof d.latitude === "number"
);
const svg = d3.select("svg");
const triangles = svg
.selectAll("path.launch-triangle")
.data(filtered, (d) =>
d ? `${d.longitude}-${d.latitude}-${d.date}` : Math.random()
);
triangles
.enter()
.append("path")
.attr("class", "launch-triangle")
.attr("d", trianglePath)
.attr("fill", "lime")
.attr("stroke", "black")
.attr("opacity", 1)
.attr("transform", (d) => {
const coords = projection([d.longitude, d.latitude]);
if (!coords) return "translate(-9999,-9999)";
const [x, y] = coords;
return `translate(${x}, ${y}) scale(2)`;
})
.raise();
triangles.transition().duration(300).attr("opacity", 1);
triangles.exit().transition().duration(300).attr("opacity", 0).remove();
}