sims = {
const agents = lignes.features
.map(d => {
const line = d.geometry.coordinates;
const domain = [];
var c0 = line[0],
l = 0;
line.forEach(c => {
domain.push((l += d3.geoDistance(c, c0)));
c0 = c;
});
const lon = d3
.scaleLinear()
.domain(domain)
.range(line.map(d => d[0])),
lat = d3
.scaleLinear()
.domain(domain)
.range(line.map(d => d[1]));
return {
line,
domain,
max: l,
pos0: l * Math.random(),
speed: l / 10,
dir: 1,
lon,
lat,
color: `rgb(${d.properties.couleur})`,
metro: d.properties.metro
};
});
return function(t) {
return agents.map(a => {
a.pos = ((t / 1000) * a.speed + a.pos0) % (2 * a.max);
if (a.pos > a.max) a.pos = a.pos - a.max;
return {
coordinates: [a.lon(a.pos), a.lat(a.pos)],
color: a.color,
metro: a.metro
};
});
};
}