Skip to content

Commit

Permalink
Merge branch 'master' into sf-conan2
Browse files Browse the repository at this point in the history
  • Loading branch information
SiarheiFedartsou committed Oct 21, 2024
2 parents df5da66 + 48e8382 commit a463bbb
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 40 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@
- ADDED: Extract prerelease/build information from package semver [#6839](https://github.com/Project-OSRM/osrm-backend/pull/6839)
- Profiles:
- FIXED: Bicycle and foot profiles now don't route on proposed ways [#6615](https://github.com/Project-OSRM/osrm-backend/pull/6615)
- ADDED: Add optional support of cargo bike exclusion and width to bicyle profile [#7044](https://github.com/Project-OSRM/osrm-backend/pull/7044)
- Routing:
- FIXED: Fix adding traffic signal penalties during compression [#6419](https://github.com/Project-OSRM/osrm-backend/pull/6419)
- FIXED: Correctly handle compressed traffic signals. [#6724](https://github.com/Project-OSRM/osrm-backend/pull/6724)
Expand Down
40 changes: 0 additions & 40 deletions include/util/bearing.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,46 +11,6 @@ namespace osrm::util
namespace bearing
{

inline std::string get(const double heading)
{
BOOST_ASSERT(heading >= 0);
BOOST_ASSERT(heading <= 360);

if (heading <= 22.5)
{
return "N";
}
if (heading <= 67.5)
{
return "NE";
}
if (heading <= 112.5)
{
return "E";
}
if (heading <= 157.5)
{
return "SE";
}
if (heading <= 202.5)
{
return "S";
}
if (heading <= 247.5)
{
return "SW";
}
if (heading <= 292.5)
{
return "W";
}
if (heading <= 337.5)
{
return "NW";
}
return "N";
}

// Checks whether A is between B-range and B+range, all modulo 360
// e.g. A = 5, B = 5, range = 10 == true
// A = -6, B = 5, range = 10 == false
Expand Down
48 changes: 48 additions & 0 deletions profiles/bicycle.lua
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ function setup()
turn_bias = 1.4,
use_public_transport = true,

-- Exclude narrow ways, in particular to route with cargo bike
width = nil, -- Cargo bike could 0.5 width, in meters
exclude_cargo_bike = false,

allowed_start_modes = Set {
mode.cycling,
mode.pushing_bike
Expand Down Expand Up @@ -243,6 +247,27 @@ function process_node(profile, node, result)
end
end

if profile.exclude_cargo_bike then
local cargo_bike = node:get_value_by_key("cargo_bike")
if cargo_bike and cargo_bike == "no" then
result.barrier = true
end
end

-- width
if profile.width then
-- From barrier=cycle_barrier or other barriers
local maxwidth_physical = node:get_value_by_key("maxwidth:physical")
local maxwidth_physical_meter = maxwidth_physical and Measure.parse_value_meters(maxwidth_physical) or 99
local opening = node:get_value_by_key("opening")
local opening_meter = opening and Measure.parse_value_meters(opening) or 99
local width_meter = math.min(maxwidth_physical_meter, opening_meter)

if width_meter and width_meter < profile.width then
result.barrier = true
end
end

-- check if node is a traffic light
result.traffic_lights = TrafficSignal.get_value(node)
end
Expand Down Expand Up @@ -299,6 +324,8 @@ function handle_bicycle_tags(profile,way,result,data)

bike_push_handler(profile,way,result,data)

-- width should be after bike_push
width_handler(profile,way,result,data)

-- maxspeed
limit( result, data.maxspeed, data.maxspeed_forward, data.maxspeed_backward )
Expand Down Expand Up @@ -453,6 +480,27 @@ function cycleway_handler(profile,way,result,data)
end
end

function width_handler(profile,way,result,data)
if profile.exclude_cargo_bike then
local cargo_bike = way:get_value_by_key("cargo_bike")
if cargo_bike and cargo_bike == "no" then
result.forward_mode = mode.inaccessible
result.backward_mode = mode.inaccessible
end
end

if profile.width then
local width = way:get_value_by_key("width")
if width then
local width_meter = Measure.parse_value_meters(width)
if width_meter and width_meter < profile.width then
result.forward_mode = mode.inaccessible
result.backward_mode = mode.inaccessible
end
end
end
end

function bike_push_handler(profile,way,result,data)
-- pushing bikes - if no other mode found
if result.forward_mode == mode.inaccessible or result.backward_mode == mode.inaccessible or
Expand Down

0 comments on commit a463bbb

Please sign in to comment.