feat(preview): add continuous vehicle turn routes

This commit is contained in:
2026-08-05 14:58:24 +08:00
parent eb9e510e13
commit 30846b6df9
11 changed files with 573 additions and 98 deletions

View File

@@ -423,7 +423,7 @@
}
function addVehicleCruises(viewer, routeData, vehicleModelName) {
const segments = ((routeData && routeData.segments) || [])
const segments = ((routeData && (routeData.routes || routeData.segments)) || [])
.filter((segment) => segment.coordinates && segment.coordinates.length >= 2)
.slice(0, 5);
const speed = Number((routeData && routeData.speedMetersPerSecond) || 8);
@@ -439,7 +439,7 @@
const vehicle = addCruiseVehicle(viewer, segment, index, start, speed, vehicleModelName);
const option = document.createElement("option");
option.value = String(index);
option.textContent = "#" + (index + 1) + " " + segment.name + " " + Math.round(segment.lengthMeters) + "m";
option.textContent = routeLabel(segment, index);
vehicleSelect.appendChild(option);
return vehicle;
});
@@ -493,10 +493,24 @@
positions,
route,
segment,
label: "Vehicle #" + (index + 1) + " | route " + segment.id + " | " + Math.round(segment.lengthMeters) + "m"
label: routeLabel(segment, index),
};
}
function routeLabel(route, index) {
const counts = { left: 0, right: 0, through: 0 };
for (const maneuver of route.maneuvers || []) {
if (maneuver in counts) counts[maneuver] += 1;
}
const actions = [
counts.left ? "左 " + counts.left : "",
counts.right ? "右 " + counts.right : "",
counts.through ? "直 " + counts.through : "",
].filter(Boolean).join(" / ");
return "#" + (index + 1) + " · " + Math.round(route.lengthMeters || 0) + " m" +
(actions ? " · " + actions : "");
}
function selectedVehicle(cruise) {
return cruise.vehicles[cruise.state.selectedIndex] || cruise.vehicles[0];
}