From 832cdbf5668ae368c0b43cc9e5bdfcfc30d3c770 Mon Sep 17 00:00:00 2001 From: Denis Koronchik Date: Tue, 3 Oct 2017 17:06:39 +0300 Subject: [PATCH] Some fixes --- features/options/profiles/version3.feature | 34 +++++----------------- profiles/car.lua | 6 ++-- src/extractor/extractor.cpp | 5 ++-- 3 files changed, 13 insertions(+), 32 deletions(-) diff --git a/features/options/profiles/version3.feature b/features/options/profiles/version3.feature index 5ab00c84c..76f922106 100644 --- a/features/options/profiles/version3.feature +++ b/features/options/profiles/version3.feature @@ -14,7 +14,6 @@ Feature: Profile API version 3 find_access_tag = require("lib/access").find_access_tag limit = require("lib/maxspeed").limit - function setup() return { properties = { @@ -23,7 +22,8 @@ Feature: Profile API version 3 continue_straight_at_waypoint = true, weight_name = 'test_version2', weight_precision = 2 - } + }, + relation_types = Sequence { "route" } } end @@ -39,30 +39,15 @@ Feature: Profile API version 3 result.forward_speed = 36 result.backward_speed = 36 - for _, r in ipairs(relations) do - for k, v in pairs(r) do - print('data_' .. k .. '_value_' .. v) - end + 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 role = rel:get_role(way) + print('role_' .. role) end print ('process_way ' .. way:id() .. ' ' .. result.name) end - function process_relation(profile, relation, result) - local t = relation:get_value_by_key("type") - if t == "route" then - for _, m in ipairs(relation:members()) do - if m:role() == "north" then - result[m]['direction'] = 'north' - print('direction_north') - end - end - - print('route_relation') - end - - print ('process_relation ' .. relation:id()) - end - function process_turn (profile, turn) print('process_turn', turn.angle, turn.turn_type, turn.direction_modifier, turn.has_traffic_light) turn.weight = turn.angle == 0 and 0 or 4.2 @@ -103,14 +88,11 @@ Feature: Profile API version 3 When I run "osrm-extract --profile {profile_file} {osm_file}" Then it should exit successfully - And stdout should contain "process_relation" - And stdout should contain "route_relation" - And stdout should contain "direction_north" - And stdout should contain "data_direction_value_north" And stdout should contain "process_node" And stdout should contain "process_way" And stdout should contain "process_turn" And stdout should contain "process_segment" + And stdout should contain "role_north" When I route I should get | from | to | route | time | diff --git a/profiles/car.lua b/profiles/car.lua index c61415099..2193af261 100644 --- a/profiles/car.lua +++ b/profiles/car.lua @@ -404,9 +404,9 @@ function process_way(profile, way, result, relations) local parsed_rel_list = {} local rel_id_list = relations:get_relations(way) - for i, r in ipairs(rel_id_list) do - local rel_id = relations:relation(r) - parsed_rel_list[i] = Relations.parse_route_relation(rel_id, way) + for i, rel_id in ipairs(rel_id_list) do + local rel = relations:relation(rel_id) + parsed_rel_list[i] = Relations.parse_route_relation(rel, way) end -- now process relations data diff --git a/src/extractor/extractor.cpp b/src/extractor/extractor.cpp index 78fc981e2..048e36ecc 100644 --- a/src/extractor/extractor.cpp +++ b/src/extractor/extractor.cpp @@ -390,7 +390,6 @@ Extractor::ParseOSMData(ScriptingEnvironment &scripting_environment, auto relation_types = scripting_environment.GetRelations(); std::sort(relation_types.begin(), relation_types.end()); - ExtractionRelationContainer relations; std::vector restrictions = scripting_environment.GetRestrictions(); // setup restriction parser const RestrictionParser restriction_parser( @@ -409,6 +408,8 @@ Extractor::ParseOSMData(ScriptingEnvironment &scripting_environment, std::vector resulting_restrictions; }; + ExtractionRelationContainer relations; + const auto buffer_reader = [](osmium::io::Reader &reader) { return tbb::filter_t( tbb::filter::serial_in_order, [&reader](tbb::flow_control &fc) { @@ -479,8 +480,6 @@ Extractor::ParseOSMData(ScriptingEnvironment &scripting_environment, } }); - - tbb::filter_t> buffer_relation_cache( tbb::filter::parallel, [&](const SharedBuffer buffer) { if (!buffer)