95 lines
3.3 KiB
JavaScript
95 lines
3.3 KiB
JavaScript
export const BIKEPACKING_PROFILES = {
|
|
beginner_safe: {
|
|
id: 'beginner_safe',
|
|
label: 'Beginner-safe',
|
|
dailyDistanceKm: { min: 40, target: 55, max: 70 },
|
|
maxGradeWarningPercent: 10,
|
|
waterGapMaxKm: 25,
|
|
foodGapMaxKm: 40,
|
|
repairGapMaxKm: 80,
|
|
bailoutGapMaxKm: 50,
|
|
sleepGapMaxKm: 65,
|
|
roughSurfaceTolerance: 0.35,
|
|
trafficTolerance: 0.25,
|
|
unknownAccessPenalty: 18,
|
|
preferredSurfaces: ['paved', 'asphalt', 'fine_gravel', 'compacted']
|
|
},
|
|
loaded_gravel: {
|
|
id: 'loaded_gravel',
|
|
label: 'Loaded gravel',
|
|
dailyDistanceKm: { min: 60, target: 80, max: 100 },
|
|
maxGradeWarningPercent: 12,
|
|
waterGapMaxKm: 40,
|
|
foodGapMaxKm: 70,
|
|
repairGapMaxKm: 110,
|
|
bailoutGapMaxKm: 90,
|
|
sleepGapMaxKm: 95,
|
|
roughSurfaceTolerance: 0.6,
|
|
trafficTolerance: 0.45,
|
|
unknownAccessPenalty: 12,
|
|
preferredSurfaces: ['gravel', 'fine_gravel', 'compacted', 'paved', 'asphalt', 'dirt']
|
|
},
|
|
hardtail_bikepacking: {
|
|
id: 'hardtail_bikepacking',
|
|
label: 'Hardtail bikepacking',
|
|
dailyDistanceKm: { min: 50, target: 70, max: 90 },
|
|
maxGradeWarningPercent: 15,
|
|
waterGapMaxKm: 55,
|
|
foodGapMaxKm: 90,
|
|
repairGapMaxKm: 130,
|
|
bailoutGapMaxKm: 110,
|
|
sleepGapMaxKm: 100,
|
|
roughSurfaceTolerance: 0.8,
|
|
trafficTolerance: 0.35,
|
|
unknownAccessPenalty: 10,
|
|
preferredSurfaces: ['dirt', 'singletrack', 'gravel', 'track', 'compacted']
|
|
},
|
|
road_touring: {
|
|
id: 'road_touring',
|
|
label: 'Road touring',
|
|
dailyDistanceKm: { min: 70, target: 100, max: 130 },
|
|
maxGradeWarningPercent: 10,
|
|
waterGapMaxKm: 40,
|
|
foodGapMaxKm: 70,
|
|
repairGapMaxKm: 120,
|
|
bailoutGapMaxKm: 90,
|
|
sleepGapMaxKm: 115,
|
|
roughSurfaceTolerance: 0.2,
|
|
trafficTolerance: 0.5,
|
|
unknownAccessPenalty: 14,
|
|
preferredSurfaces: ['paved', 'asphalt', 'concrete']
|
|
},
|
|
ebikepacking: {
|
|
id: 'ebikepacking',
|
|
label: 'E-bikepacking',
|
|
dailyDistanceKm: { min: 50, target: 75, max: 100 },
|
|
maxGradeWarningPercent: 12,
|
|
waterGapMaxKm: 40,
|
|
foodGapMaxKm: 60,
|
|
repairGapMaxKm: 100,
|
|
bailoutGapMaxKm: 80,
|
|
sleepGapMaxKm: 90,
|
|
roughSurfaceTolerance: 0.5,
|
|
trafficTolerance: 0.4,
|
|
unknownAccessPenalty: 15,
|
|
preferredSurfaces: ['paved', 'asphalt', 'gravel', 'compacted']
|
|
}
|
|
};
|
|
export function getProfile(profileId) {
|
|
return BIKEPACKING_PROFILES[profileId];
|
|
}
|
|
export function thresholdsFromTripRequest(request) {
|
|
const profile = getProfile(request.profile);
|
|
return {
|
|
water: (request.waterGapMaxKm ?? profile.waterGapMaxKm) * 1000,
|
|
food: (request.foodGapMaxKm ?? profile.foodGapMaxKm) * 1000,
|
|
repair: profile.repairGapMaxKm * 1000,
|
|
bailout: (request.requireBailoutEveryKm ?? profile.bailoutGapMaxKm) * 1000,
|
|
sleep: profile.sleepGapMaxKm * 1000,
|
|
charging: request.profile === 'ebikepacking' ? 60000 : undefined
|
|
};
|
|
}
|
|
export function maxLoadedGradeForRequest(request) {
|
|
return request.maxLoadedGradePercent ?? getProfile(request.profile).maxGradeWarningPercent;
|
|
}
|
|
//# sourceMappingURL=profiles.js.map
|