pass flags into process_segment (#6658)

* pass flags into process_segment

---------

Co-authored-by: Michael Bell <michael@mjjbell.com>
This commit is contained in:
Matthew Wigginton Bhagat-Conway 2024-04-06 04:27:42 -04:00 committed by GitHub
parent 8ef366e061
commit 7ebd21f39e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 69 additions and 4 deletions

View File

@ -5,6 +5,7 @@
- ADDED: Add support for a default_radius flag. [#6575](https://github.com/Project-OSRM/osrm-backend/pull/6575) - ADDED: Add support for a default_radius flag. [#6575](https://github.com/Project-OSRM/osrm-backend/pull/6575)
- ADDED: Add support for disabling feature datasets. [#6666](https://github.com/Project-OSRM/osrm-backend/pull/6666) - ADDED: Add support for disabling feature datasets. [#6666](https://github.com/Project-OSRM/osrm-backend/pull/6666)
- ADDED: Add support for opposite approach request parameter. [#6842](https://github.com/Project-OSRM/osrm-backend/pull/6842) - ADDED: Add support for opposite approach request parameter. [#6842](https://github.com/Project-OSRM/osrm-backend/pull/6842)
- ADDED: Add support for accessing edge flags in `process_segment` [#6658](https://github.com/Project-OSRM/osrm-backend/pull/6658)
- Build: - Build:
- ADDED: Add CI job which builds OSRM with gcc 12. [#6455](https://github.com/Project-OSRM/osrm-backend/pull/6455) - ADDED: Add CI job which builds OSRM with gcc 12. [#6455](https://github.com/Project-OSRM/osrm-backend/pull/6455)
- CHANGED: Upgrade to clang-tidy 15. [#6439](https://github.com/Project-OSRM/osrm-backend/pull/6439) - CHANGED: Upgrade to clang-tidy 15. [#6439](https://github.com/Project-OSRM/osrm-backend/pull/6439)

View File

@ -154,3 +154,27 @@ Feature: osrm-extract lua ways:get_nodes()
Then it should exit successfully Then it should exit successfully
And stdout should contain "node 42" And stdout should contain "node 42"
And stdout should contain "way 42" And stdout should contain "way 42"
Scenario: osrm-extract flags accessible in process_segment function
Given the profile file
"""
functions = require('testbot')
functions.process_segment = function (profile, segment)
print('segment forward ' .. tostring(segment.flags.forward) .. ' backward ' .. tostring(segment.flags.backward))
end
return functions
"""
And the node map
"""
a b
"""
And the ways
| nodes | oneway |
| ab | yes |
And the data has been saved to disk
When I run "osrm-extract --profile {profile_file} {osm_file}"
Then it should exit successfully
And stdout should contain "segment forward true backward false"

View File

@ -1,6 +1,7 @@
#ifndef OSRM_EXTRACTION_SEGMENT_HPP #ifndef OSRM_EXTRACTION_SEGMENT_HPP
#define OSRM_EXTRACTION_SEGMENT_HPP #define OSRM_EXTRACTION_SEGMENT_HPP
#include <extractor/node_based_edge.hpp>
#include <util/coordinate.hpp> #include <util/coordinate.hpp>
namespace osrm::extractor namespace osrm::extractor
@ -12,9 +13,10 @@ struct ExtractionSegment
const osrm::util::Coordinate target_, const osrm::util::Coordinate target_,
double distance_, double distance_,
double weight_, double weight_,
double duration_) double duration_,
const NodeBasedEdgeClassification flags_)
: source(source_), target(target_), distance(distance_), weight(weight_), : source(source_), target(target_), distance(distance_), weight(weight_),
duration(duration_) duration(duration_), flags(flags_)
{ {
} }
@ -23,6 +25,7 @@ struct ExtractionSegment
const double distance; const double distance;
double weight; double weight;
double duration; double duration;
const NodeBasedEdgeClassification flags;
}; };
} // namespace osrm::extractor } // namespace osrm::extractor

View File

@ -706,7 +706,12 @@ void ExtractionContainers::PrepareEdges(ScriptingEnvironment &scripting_environm
const auto accurate_distance = const auto accurate_distance =
util::coordinate_calculation::greatCircleDistance(source_coord, target_coord); util::coordinate_calculation::greatCircleDistance(source_coord, target_coord);
ExtractionSegment segment(source_coord, target_coord, distance, weight, duration); ExtractionSegment segment(source_coord,
target_coord,
distance,
weight,
duration,
edge_iterator->result.flags);
scripting_environment.ProcessSegment(segment); scripting_environment.ProcessSegment(segment);
auto &edge = edge_iterator->result; auto &edge = edge_iterator->result;

View File

@ -471,6 +471,36 @@ void Sol2ScriptingEnvironment::InitContext(LuaScriptingContext &context)
[](ExtractionRelationContainer &cont, const ExtractionRelation::OsmIDTyped &rel_id) [](ExtractionRelationContainer &cont, const ExtractionRelation::OsmIDTyped &rel_id)
-> const ExtractionRelation & { return cont.GetRelationData(rel_id); }); -> const ExtractionRelation & { return cont.GetRelationData(rel_id); });
context.state.new_usertype<NodeBasedEdgeClassification>(
"NodeBasedEdgeClassification",
"forward",
// can't just do &NodeBasedEdgeClassification::forward with bitfields
sol::property([](NodeBasedEdgeClassification &c) -> bool { return c.forward; }),
"backward",
sol::property([](NodeBasedEdgeClassification &c) -> bool { return c.backward; }),
"is_split",
sol::property([](NodeBasedEdgeClassification &c) -> bool { return c.is_split; }),
"roundabout",
sol::property([](NodeBasedEdgeClassification &c) -> bool { return c.roundabout; }),
"circular",
sol::property([](NodeBasedEdgeClassification &c) -> bool { return c.circular; }),
"startpoint",
sol::property([](NodeBasedEdgeClassification &c) -> bool { return c.startpoint; }),
"restricted",
sol::property([](NodeBasedEdgeClassification &c) -> bool { return c.restricted; }),
"road_classification",
sol::property([](NodeBasedEdgeClassification &c) -> RoadClassification {
return c.road_classification;
}),
"highway_turn_classification",
sol::property([](NodeBasedEdgeClassification &c) -> uint8_t {
return c.highway_turn_classification;
}),
"access_turn_classification",
sol::property([](NodeBasedEdgeClassification &c) -> uint8_t {
return c.access_turn_classification;
}));
context.state.new_usertype<ExtractionSegment>("ExtractionSegment", context.state.new_usertype<ExtractionSegment>("ExtractionSegment",
"source", "source",
&ExtractionSegment::source, &ExtractionSegment::source,
@ -481,7 +511,9 @@ void Sol2ScriptingEnvironment::InitContext(LuaScriptingContext &context)
"weight", "weight",
&ExtractionSegment::weight, &ExtractionSegment::weight,
"duration", "duration",
&ExtractionSegment::duration); &ExtractionSegment::duration,
"flags",
&ExtractionSegment::flags);
// Keep in mind .location is available only if .pbf is preprocessed to set the location with the // Keep in mind .location is available only if .pbf is preprocessed to set the location with the
// ref using osmium command "osmium add-locations-to-ways" // ref using osmium command "osmium add-locations-to-ways"