From 45e4a6a1f6fe0e89740b0458ac174c05983d080e Mon Sep 17 00:00:00 2001 From: MichalPP Date: Sat, 19 May 2018 11:28:46 +0200 Subject: [PATCH 1/3] create filter_relations function --- profiles/lib/relations.lua | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/profiles/lib/relations.lua b/profiles/lib/relations.lua index f061b5780..169374890 100644 --- a/profiles/lib/relations.lua +++ b/profiles/lib/relations.lua @@ -258,4 +258,18 @@ function Relations.process_way_refs(way, relations, result) end end +function Relations.filter_relations(relations, way, key, value, ret, forward) + -- if any of way's relation have key=value, return tag ret; else return nil + -- todo: check backward and forward + if not forward then forward = 'forward'; end -- ignored at the moment + local rel_id_list = relations:get_relations(way) + for i, rel_id in ipairs(rel_id_list) do + local rel = relations:relation(rel_id); + local p = rel:get_value_by_key(key); + if value == '*' and p then return rel:get_value_by_key(ret); end + if p == value then return rel:get_value_by_key(ret); end + end + return nil; +end + return Relations From 8ee25665da6b436b80d952e6fda998990bb0fcf1 Mon Sep 17 00:00:00 2001 From: MichalPP Date: Sat, 19 May 2018 11:30:12 +0200 Subject: [PATCH 2/3] prefer ways on route=bicycle --- profiles/bicycle.lua | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/profiles/bicycle.lua b/profiles/bicycle.lua index f08bcebe2..476a9f47b 100644 --- a/profiles/bicycle.lua +++ b/profiles/bicycle.lua @@ -32,6 +32,7 @@ function setup() turn_penalty = 6, turn_bias = 1.4, use_public_transport = true, + route_preference = 1.1, allowed_start_modes = Set { mode.cycling, @@ -324,6 +325,7 @@ function handle_bicycle_tags(profile,way,result,data) end safety_handler(profile,way,result,data) + bicycle_relation_handler(profile,way,result,data,relations) end @@ -464,6 +466,16 @@ function cycleway_handler(profile,way,result,data) end end +function bicycle_relation_handler(profile,way,result,data,relations) + -- prefer ways on route=bicycle by factor of profile.route_preference + if result.forward_rate and Relations.filter_relations(relations, way, "route", "bicycle", "route", "forward") == "bicycle" then + result.forward_rate = result.forward_rate * profile.route_preference + end + if result.backward_rate and Relations.filter_relations(relations, way, "route", "bicycle", "route", "backward") == "bicycle" then + result.backward_rate = result.backward_rate * profile.route_preference + 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 From f2f9990f01ae8eb25d8bc2c127949409af76c9e1 Mon Sep 17 00:00:00 2001 From: MichalPP Date: Sat, 19 May 2018 13:01:08 +0200 Subject: [PATCH 3/3] require relations.lua in bicycle profile --- profiles/bicycle.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/profiles/bicycle.lua b/profiles/bicycle.lua index 476a9f47b..ccb77966f 100644 --- a/profiles/bicycle.lua +++ b/profiles/bicycle.lua @@ -5,6 +5,7 @@ api_version = 4 Set = require('lib/set') Sequence = require('lib/sequence') Handlers = require("lib/way_handlers") +Relations = require("lib/relations") find_access_tag = require("lib/access").find_access_tag limit = require("lib/maxspeed").limit