| | |
| | | buildCarMarkerStructureSignature(nextCar); |
| | | const latestVehicleLatitude = Number(deps.vehicleLocation?.latitude); |
| | | const latestVehicleLongitude = Number(deps.vehicleLocation?.longitude); |
| | | // 车辆在签名中以 'translate' 占位,签名差异只可能来自非车辆 marker(如终点从新目的地回退到原目的地)。 |
| | | // 因此仅当非车辆 marker 结构未变、车辆结构未变且无需清理朝向时才保留旧 marker,否则必须应用最新 marker,避免终点/上车点残留。 |
| | | if (!shouldRefreshCarMarkerStructure) { |
| | | return prevMarkers; |
| | | } |
| | | // 签名差异中车辆位置/朝向以 'translate' 占位,因此差异只可能来自非车辆 marker |
| | | // (如修改目的地取消后,终点从未确认的新目的地回退到原目的地)。此时必须应用最新 marker, |
| | | // 否则会保留旧的下车点 marker/气泡,导致终点与车辆实际路线不一致。 |
| | | // 车辆结构未变时沿用上一帧车辆 marker 的结构字段,仅同步最新坐标,避免不必要的原生车标重建。 |
| | | const carMarkerSource = shouldRefreshCarMarkerStructure ? nextCar : prevCar; |
| | | mergedMarkers[nextCarIndex] = { |
| | | ...nextCar, |
| | | ...carMarkerSource, |
| | | // 平移态下车辆朝向只由 translateMarker 控制,React 仅负责结构和坐标占位。 |
| | | latitude: Number.isFinite(latestVehicleLatitude) |
| | | ? latestVehicleLatitude |