[routing] Add faux oneways for motor_vehicle and vehicle forward/backward

Signed-off-by: Eivind Samseth <eisa01@gmail.com>
Co-authored-by: Eivind Samseth <eisa01@gmail.com>
Co-committed-by: Eivind Samseth <eisa01@gmail.com>
This commit is contained in:
Eivind Samseth
2025-08-02 22:57:41 +02:00
committed by x7z4w
parent c2bd2b897a
commit fdeeb1ae34
2 changed files with 27 additions and 1 deletions

View File

@@ -1140,7 +1140,22 @@ void PostprocessElement(OsmElement * p, FeatureBuilderParams & params)
// And most of this junctions are assumed to be oneway.
{"junction", "circular", [&addOneway] { addOneway = true; }},
{"junction", "roundabout", [&addOneway] { addOneway = true; }},
// Add faux oneways as access keys don't support forward/backward modifiers
// Bicycles are not motor vehicles, so don't add oneways for them.
{"motor_vehicle:backward", "no", [&addOneway] { addOneway = true; }},
{"vehicle:backward", "no", [&addOneway] { addOneway = true; }},
{"motor_vehicle:forward", "no",
[&addOneway, &params] {
addOneway = true;
params.SetReversedGeometry(true);
}},
{"vehicle:forward", "no",
[&addOneway, &params] {
addOneway = true;
params.SetReversedGeometry(true);
}},
{"motor_vehicle:backward", "no", [&AddParam] { AddParam(CachedTypes::BicycleBidir); }},
{"motor_vehicle:forward", "no", [&AddParam] { AddParam(CachedTypes::BicycleBidir); }},
{"access", "private", [&AddParam] { AddParam(CachedTypes::Private); }},
{"access", "!", [&AddParam] { AddParam(CachedTypes::Private); }},

View File

@@ -1030,4 +1030,15 @@ UNIT_TEST(USA_UseDirt_WithMaxspeed)
FromLatLon(42.3878106, 19.7831402), 247.139);
}
// https://codeberg.org/comaps/comaps/issues/304
UNIT_TEST(Norway_FauxOneway_MotorVehicleBackward_No)
{
CalculateRouteAndTestRouteLength(GetVehicleComponents(VehicleType::Car),
FromLatLon(59.919189, 10.759355), {0., 0.},
FromLatLon(59.921042, 10.759302), 410);
CalculateRouteAndTestRouteLength(GetVehicleComponents(VehicleType::Bicycle),
FromLatLon(59.919189, 10.759355), {0., 0.},
FromLatLon(59.921042, 10.759302), 210);
}
} // namespace route_test